AskClean

Poista Xcoden DerivedData ja kehittäjävälimuistit turvallisesti

AskClean-tiimi · Päivitetty 2026-11-02

DerivedData on Xcoden työkansio käännöstuotteille ja indekseille, ja se voi kasvaa huomaamatta kymmeniin gigatavuihin. Sen poistaminen on turvallista: sulje Xcode, poista kansion ~/Library/Developer/Xcode/DerivedData sisältö, ja Xcode rakentaa kaiken uudelleen seuraavalla käännöksellä. Opas käy läpi tämän sekä simulaattorit, arkistot ja pakettivälimuistit.

Poista Xcoden DerivedData ja kehittäjävälimuistit turvallisesti
Näin poistat Xcoden DerivedDatan turvallisesti ja siivoat vanhat simulaattorien suoritusympäristöt, arkistot, DeviceSupport-tiedostot ja pakettivälimuistit.

Mikä DerivedData on ja miksi se kasvaa niin suureksi

DerivedData on paikka, jossa Xcode säilyttää kaiken lähdekoodistasi johdetun: käännöksen välitiedostot, käännetyt tuotteet, moduulivälimuistit, koodintäydennyksen ja määrittelyyn siirtymisen (jump to definition) symboli-indeksit sekä käännöslokit. Se sijaitsee oletuksena polussa ~/Library/Developer/Xcode/DerivedData, ja jokaisella koskaan avaamallasi projektilla tai työtilalla on siellä oma alikansionsa.

Kasvulle on rakenteellinen syy: Xcode luo DerivedData-kansion jokaiselle avaamallesi projektille – myös kertaluonteisille klooneille, jotka käänsit kerran etkä avannut enää koskaan – eikä poista niitä oma-aloitteisesti. Kukin kansio sisältää erilliset käännöstuotteet jokaiselle konfiguraatiolle ja kohteelle (Debug ja Release, simulaattori ja laite), joten mittaa projektien alikansiot sen sijaan, että arvailisit, paljonko tilaa Macistasi vapautuu.

Kaikki sen sisältö on määritelmän mukaan luotavissa uudelleen – sitähän ”derived” (johdettu) tarkoittaa. DerivedDatan poistaminen ei koske lähdekoodiisi, projektiasetuksiisi eikä mihinkään versionhallinnassa olevaan. Ainoa kustannus on aika: kunkin projektin seuraava käännös on täysi puhdas käännös, ja indeksointi pyörii taustalla muutaman minuutin.

Poista DerivedData

Xcoden Clean Build Folder -komento (Product > Clean Build Folder tai vaihto-komento-K) tyhjentää vain parhaillaan avoinna olevan projektin käännöstuotteet. Siitä on apua oudosti käyttäytyvän käännöksen korjaamisessa, mutta levytilaan se tuskin vaikuttaa. Todellisen tilan saat takaisin poistamalla itse DerivedData-kansiot: avaa ne Xcoden Locations-asetuksista, siirry kansioon Finderissa tai poista ne Päätteessä. Kaikki kolme tapaa johtavat samaan lopputulokseen.

Projektikohtainen poisto on tarkka vaihtoehto: säilytä DerivedData niille kahdelle tai kolmelle projektille, joita käännät päivittäin, ja poista muiden kansiot. Koko kansion poistaminen on nopea vaihtoehto, ja sekin on ihan hyvä – maksat vain kaikkien projektien täyden uudelleenkäännöksen kerralla.

  1. Sulje Xcode ensin. Jos poistat DerivedDatan Xcoden ollessa käynnissä, sen indeksoija voi sekoittua, eivätkä Xcoden avoinna pitämät tiedostot välttämättä poistu siististi.
  2. Etsi kansio: avaa Xcodessa Settings > Locations ja klikkaa DerivedData-polun vieressä olevaa pientä nuolta, niin kansio avautuu Finderissa. Voit myös painaa Finderissa vaihto-komento-G (Siirry kansioon) ja kirjoittaa suoraan ~/Library/Developer/Xcode/DerivedData.
  3. Järjestä projektien alikansiot koon mukaan, valitse ne, joista haluat eroon (tai kaikki painamalla komento-A), ja siirrä ne roskakoriin. Roskakorin kautta poistaminen on turvallisempi tapa – voit palauttaa kansiot heti, jos muutat mielesi.
  4. Vaihtoehtoisesti Päätteessä: rm -rf ~/Library/Developer/Xcode/DerivedData poistaa kaiken kerralla. Hyvin suurilla kansioilla se on Finderia nopeampi, mutta lue alla oleva huomautus ennen kuin käytät sitä.
  5. Avaa Xcode uudelleen ja käännä. Kunkin projektin ensimmäinen käännös kestää selvästi tavallista kauemmin, ja ”Indexing” näkyy toimintopalkissa jonkin aikaa – molemmat ovat kertaluonteisia kustannuksia.

Ole varovainen rm -rf:n kanssa: komento ohittaa roskakorin ja poistaa pysyvästi, eikä poistoa voi perua. Kirjoita polku täsmälleen oikein, älä koskaan aja komentoa sudolla tässä tehtävässä, ja jos Pääte ei ole sinulle tuttu, Finder tekee saman työn niin, että sen voi perua.

Poista vanhat simulaattorien suoritusympäristöt

Simulaattorit ovat usein toinen suuri kehittäjän tallennustilaa vievä luokka. Jokainen ladattu iOS-, watchOS- tai tvOS-suoritusympäristö vie oman tilansa, ja jokainen simuloitu laite säilyttää tietojaan polussa ~/Library/Developer/CoreSimulator/Devices. Jos olet päivittänyt Xcoden jo muutaman kerran, tarkista suoritusympäristöt käyttöjärjestelmäversioille, joita et enää testaa.

Nopein keino on sisäänrakennettu siivouskomento: aja Päätteessä xcrun simctl delete unavailable. Se poistaa kaikki unavailable-merkityt simulaattorilaitteet – useimmiten orpoja laitteita, jotka poistetut suoritusympäristöt ja vanhat Xcode-versiot ovat jättäneet jälkeensä – ja niiden mukana laitteiden sovellukset ja tiedot. Käy luettelo ensin läpi komennolla xcrun simctl list devices, varsinkin jos Macissasi on useampi kuin yksi Xcode.

Itse suoritusympäristöt poistat Xcoden kohdassa Settings > Components (Xcode 14–15:ssä nimeltään Platforms). Siellä näkyy jokainen asennettu simulaattorin suoritusympäristö kokoineen; valitse vanha ja poista se. Säilytä kullekin alustalle vain uusin suoritusympäristö, ellet aktiivisesti testaa vanhemmilla käyttöjärjestelmäversioilla.

Voit karsia myös yksittäisiä simuloituja laitteita kohdassa Window > Devices and Simulators: siirry Simulators-välilehdelle, klikkaa hiiren oikealla painikkeella laitetta, jota et koskaan käytä – vaikkapa niitä kuutta päällekkäistä iPhone-mallia vanhojen testiajojen tietoineen – ja valitse Delete. Laitteen tallennetut tiedot ja sovellukset poistuvat sen mukana.

Arkistot, DeviceSupport-tiedostot ja välimuistit

Arkistoja kertyy polkuun ~/Library/Developer/Xcode/Archives aina, kun ajat Product > Archive jaellaksesi käännöksen. Jokainen arkisto sisältää täydellisen sovelluskäännöksen ja sen dSYM-virheenjäljityssymbolit, usein 100 Mt – 1 Gt kappaleelta. Tiedä ennen poistamista, mistä luovut: arkiston dSYM-tiedostoilla symboloidaan juuri kyseisen käännöksen kaatumisraportit. Säilytä arkistot versioista, jotka ovat yhä App Storessa tai TestFlightissa (tai varmista, että dSYM-tiedostot ovat App Store Connectissa), ja poista loput – turvallisimmin Xcoden Organizerissa (Window > Organizer > Archives), jossa näet arkistot asiayhteydessään ennen poistoa.

iOS DeviceSupport -kansio (~/Library/Developer/Xcode/iOS DeviceSupport) sisältää virheenjäljityssymbolit, jotka Xcode kopioi jokaisesta Maciin koskaan kytketystä iPhonesta tai iPadista – yksi kansio iOS-versiota kohden, tyypillisesti 2–5 Gt kukin. Kansiot iOS-versioille, joita yksikään laitteistasi ei enää käytä, ovat pelkkää painolastia: poista ne. Jos myöhemmin kytket laitteen, jossa on sama versio, Xcode yksinkertaisesti kopioi symbolit uudelleen (näet kerran ilmoituksen ”Preparing debugger support”). Vastaavat kansiot on myös watchOS- ja tvOS-laitteille.

Xcode pitää omia välimuistejaan myös polussa ~/Library/Caches/com.apple.dt.Xcode, ja simulaattorit omiaan polussa ~/Library/Developer/CoreSimulator/Caches. Molemmat luodaan tarvittaessa uudelleen, mutta tyhjennä ne vain, kun Xcode ja Simulator-sovellus on suljettu, ja jätä rauhaan CoreSimulatorin välimuistitiedostot, joita et tunnista.

Pakettienhallintojen välimuistit (SwiftPM, CocoaPods, npm, Homebrew)

Pakettienhallinnat säilyttävät ladatut riippuvuudet, jotta tulevat asennukset olisivat nopeita. Se on hyödyllistä, mutta vuosien projektit nähneellä koneella välimuisteista voi silti tulla suuri tilasyöppö. Nämä latausvälimuistit voi luoda uudelleen, mutta seuraava asennus joutuu lataamaan paketit uudelleen.

Swift Package Manager tallentaa ladatut paketit polkuun ~/Library/Caches/org.swift.swiftpm, ja kunkin projektin ratkaistujen pakettien checkoutit ovat lisäksi projektin DerivedData-kansiossa – joten DerivedDatan tyhjentäminen siivoaa jo ne. Jaetun välimuistin voit poistaa Finderissa tai komennolla rm -rf kyseiseen polkuun.

CocoaPods säilyttää lataamansa podit polussa ~/Library/Caches/CocoaPods. Siisti tapa tyhjentää se on sisäänrakennettu komento pod cache clean --all. Projektiesi Pods-kansioihin ei kosketa; vain latausvälimuisti tyhjenee.

npm:n välimuisti on polussa ~/.npm, ja JavaScript-painotteisella koneella se voi kasvaa monen gigatavun kokoiseksi. Tyhjennä se komennolla npm cache clean --force (npm vaatii --force-valitsimen, koska välimuisti korjaa itse itsensä eikä sitä normaalisti tarvitse siivota; poistaminen on silti turvallista – paketit vain ladataan uudelleen seuraavassa asennuksessa). pnpm-käyttäjät voivat ajaa sen sijaan komennon pnpm store prune.

Homebrew kerää vanhoja latauksia ja vanhentuneita pakettiversioita. brew cleanup poistaa vanhentuneet versiot ja vanhat lataukset, ja ilman pakettinimiä ajettuna se poistaa myös riippuvuudet, joita mikään ei enää tarvitse (ellei HOMEBREW_NO_AUTOREMOVE ole asetettu); brew cleanup --prune=all tyhjentää lisäksi koko latausvälimuistin. Aja ensin brew cleanup -n, jos haluat nähdä etukäteen luettelon poistettavista kohteista (dry run).

Automatisoi siivous

Kaikki edellä kuvattu toimii, mutta kehittäjäroskan kanssa ollaan oravanpyörässä: DerivedData on palannut viikon tavallisen työn jälkeen, välimuistit täyttyvät uudelleen ja jokainen Xcode-päivitys jättää jälkeensä taas yhden suoritusympäristön. Jos et halua toistaa kuutta käsin tehtävää toimenpidettä joka kuukausi, juuri tämä osa kannattaa automatisoida – työkalulla, joka näyttää perustelunsa sen sijaan, että poistaisi hiljaa massoittain.

AskClean käsittelee kehittäjätiedostoja omina luokkinaan: yksi skannaus erittelee Xcoden DerivedDatan projekteittain, vanhat simulaattorien suoritusympäristöt (luetaan simctl:n avulla, ja kunkin alustan uusin säilytetään), DeviceSupport-tiedostot sekä npm:n, SwiftPM:n, cargon, uv:n ja muiden pakettienhallintojen välimuistit. Se löytää myös uudemmat tilasyöpöt – paikalliset tekoälymallit – ja listaa Hugging Face -mallit yksitellen ja Ollaman mallikirjaston yhtenä kohteena; kaikki ovat oletuksena valitsematta.

Jokaisella kohteella on selitys – mikä se on, voiko sen luoda uudelleen ja mitä poistaminen maksaa – eikä mitään tehdä ennen kuin vahvistat sen. Vahvistetut kohteet poistetaan pysyvästi eikä niitä siirretä roskakoriin, joten käy jokainen valinta läpi ennen vahvistamista; lähdekoodiisi ja kuvakirjastoosi ei kosketa koskaan. Tarkistuslista on sama kuin tässä oppaassa – ilman tunnin työtä Päätteessä.

Mikä on luotavissa uudelleen – ja mikä ei

Taulukko näyttää, mihin poistamisen rajat menevät; se ei lupaa tiettyä säästöä. Mittaa Macisi ennen jokaista toimenpidettä ja sen jälkeen – Xcode-simulaattorien tallennustilaa käsittelevän oppaan vain lukeva tarkistuskomentosarja raportoi nämä kansiot muuttamatta mitään.

LuokkaOletussijaintiPoiston seuraus
DerivedData~/Library/Developer/Xcode/DerivedDataKäännetään ja indeksoidaan uudelleen; lähdekoodi ja Git-historia säilyvät koskemattomina.
Simulaattorilaitteet~/Library/Developer/CoreSimulator/DevicesValittujen virtuaalilaitteiden sovellukset ja testitiedot menetetään; poista simctl:llä tai Xcodessa.
Arkistot~/Library/Developer/Xcode/ArchivesVoi poistaa kaatumisten symbolointiin tarvittavat dSYM-tiedostot; tarkista ensin Organizerissa.
DeviceSupport~/Library/Developer/Xcode/iOS DeviceSupportVirheenjäljityssymbolit kopioidaan uudelleen, kun laite, jossa on sama käyttöjärjestelmäversio, kytketään taas.

UKK

Onko DerivedDatan poistaminen turvallista?

Kyllä – se on yksi Macin turvallisimmista suurista poistoista. DerivedData sisältää vain tiedostoja, jotka Xcode tuottaa lähdekoodistasi: käännöstuotteita, moduulivälimuisteja, indeksejä ja lokeja. Koodisi, projektitiedostosi ja Git-historiasi ovat muualla, eikä poisto vaikuta niihin. Ainoa seuraus on, että kunkin projektin seuraava käännös on täysi uudelleenkäännös ja indeksointi tehdään uudelleen.

Kuinka usein DerivedData kannattaa tyhjentää?

Kiinteää aikataulua ei tarvita – tyhjennä se, kun se on kasvanut niin suureksi, että sillä on merkitystä; useimmilla aktiivisilla kehittäjillä tämä tarkoittaa kuukauden tai kahden välein. Kaksi tilannetta oikeuttaa sen aina: kun tarvitset levytilaa nopeasti ja kun projektissa on selittämättömiä käännösvirheitä tai vanhentunutta koodintäydennystä – silloin DerivedDatan tyhjentäminen on tavallinen ensimmäinen korjauskeino.

Hidastuuko Xcode, kun DerivedData on poistettu?

Tilapäisesti kyllä. Kunkin projektin ensimmäinen käännös on puhdas käännös, joka voi kestää moninkertaisesti inkrementaaliseen käännökseen verrattuna, ja taustaindeksointi tarvitsee muutaman minuutin ennen kuin koodintäydennys ja haku toimivat taas täysin. Ensimmäisen kierroksen jälkeen suorituskyky on täsmälleen entisellään – DerivedData sisältää välimuisteja, ei optimointeja, jotka menettäisit pysyvästi.

Entä ~/Library/Developer/CoreSimulator – voinko poistaa sen?

Et sokkona – kansiossa ovat parhaillaan asennetut simulaattorisi ja niiden tiedot, ja koko kansion poistaminen rikkoo ne, kunnes asennat suoritusympäristöt uudelleen. Karsi se sen sijaan hallitusti: aja xcrun simctl delete unavailable orvoille laitteille (niiden sovellukset ja tiedot poistuvat samalla), poista vanhat suoritusympäristöt Xcoden kohdassa Settings > Components, poista käyttämättömät laitteet Devices and Simulators -ikkunassa ja tyhjennä käsin vain Caches-alikansio, kun Xcode ja Simulator on suljettu.

Tekeekö Clean Build Folder saman asian?

Ei. Product > Clean Build Folder (vaihto-komento-K) tyhjentää vain nykyisen projektin käännöstuotteet ja jättää indeksit, moduulivälimuistit ja kaikkien muiden projektien kansiot paikoilleen. Se on käännösongelmien vianetsintätyökalu, ei levytilan vapauttamiseen tarkoitettu työkalu – todellisen tilan saat takaisin vain poistamalla itse DerivedData-kansiot.

Lähteet

Kehittäjän tallennustila vaihe vaiheelta