Poista Xcoden DerivedData ja kehittäjävälimuistit turvallisesti
AskClean Team · Updated 2026-07-18
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ä. Tämä opas kattaa sen — sekä simulaattorit, arkistot ja pakettivälimuistit.
Mikä DerivedData on ja miksi se paisuu valtavaksi
DerivedData on paikka, jossa Xcode säilyttää kaiken lähdekoodistasi johdetun: väliaikaiset käännösobjektit, käännetyt tuotteet, moduulivälimuistit, koodintäydennyksen ja määrittelyyn hyppäämisen 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 kertakloonauksille, jotka käänsit kerran etkä koskenut enää koskaan — eikä se koskaan poista niistä yhtäkään. Kukin kansio sisältää erilliset käännöstuotteet konfiguraatiota ja kohdetta kohden (Debug ja Release, simulaattori ja laite), joten yksikin keskikokoinen projekti voi viedä useita gigatavuja, ja kansio kokonaisuutena kasvaa aktiivisella kehityskoneella tyypillisesti 20–50 Gt:n kokoiseksi.
Kaikki sen sisältö on määritelmällisesti uudelleenluotavissa — sitähän ”derived” tarkoittaa. DerivedDatan poistaminen ei koskaan 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
Tapoja on kolme, ja ne päätyvät samaan lopputulokseen. Xcoden Clean Build Folder -komento (Product > Clean Build Folder, tai Komento-Vaihto-K) tyhjentää vain parhaillaan avoinna olevan projektin käännöstuotteet — hyödyllinen oudon käännösvirheen korjaamiseen, mutta levytilamittari tuskin värähtää. Todellisen tilan vapauttamiseksi poista itse DerivedData-kansiot.
Projektikohtainen poisto on kirurginen vaihtoehto: säilytä DerivedData niille kahdelle tai kolmelle projektille, joita käännät päivittäin, ja poista kansiot kaikelta muulta. Koko kansion poistaminen on nopea vaihtoehto, ja sekin on ihan hyvä — maksat vain täyden uudelleenkäännöksen hinnan kaikista projekteista kerralla.
- Sulje Xcode ensin. DerivedDatan poistaminen Xcoden ollessa käynnissä voi sekoittaa sen indeksoijan, eivätkä Xcoden avoinna pitämät tiedostot välttämättä poistu siististi.
- Etsi kansio: avaa Xcodessa Settings > Locations ja klikkaa DerivedData-polun vieressä olevaa pientä nuolta nähdäksesi sen Finderissa. Tai paina Finderissa Komento-Vaihto-G ja syötä suoraan ~/Library/Developer/Xcode/DerivedData.
- Lajittele projektialikansiot koon mukaan, valitse ne, joista haluat eroon (tai Komento-A kaikille), ja siirrä ne Roskakoriin. Roskakori ensin on turvallisempi tapa — voit palauttaa välittömästi, jos muutat mielesi.
- Terminaalista vaihtoehtoisesti: rm -rf ~/Library/Developer/Xcode/DerivedData poistaa kaiken kerralla. Se on Finderia nopeampi hyvin suurille kansioille, mutta lue alla oleva huomautus ennen käyttöä.
- Avaa Xcode uudelleen ja käännä. Odota, että kunkin projektin ensimmäinen käännös kestää selvästi pidempään ja että ”Indexing” pyörii toimintopalkissa hetken — molemmat ovat kertaluonteisia kustannuksia.
Ole varovainen rm -rf:n kanssa: se ohittaa Roskakorin ja poistaa pysyvästi, ilman peruutusta. Kirjoita polku täsmälleen oikein, älä koskaan aja sitä sudolla tähän tehtävään — ja jos Terminaali ei ole mukavuusaluettasi, Finder-reitti tekee saman työn palautettavasti.
Siivoa vanhat simulaattoriversiot
Simulaattorit ovat yleensä toiseksi suurin kehittäjätilan syöppö DerivedDatan jälkeen. Jokainen koskaan lataamasi iOS-, watchOS- tai tvOS-käyttöjärjestelmäversio vie 5–8 Gt, ja jokainen simuloitu laite pitää omaa datakansiotaan polussa ~/Library/Developer/CoreSimulator/Devices. Jos takanasi on muutama Xcode-päivitys, sinulla on todennäköisesti versioita iOS-julkaisuille, joiden tukemisen lopetit vuosia sitten.
Nopein voitto on sisäänrakennettu siivouskomento: aja xcrun simctl delete unavailable Terminaalissa. Se poistaa jokaisen simulaattorilaitteen, jonka käyttöjärjestelmäversiota ei enää ole asennettuna — vanhojen Xcode-versioiden jälkeensä jättämät orvot — eikä koske mihinkään, mitä voit yhä käyttää.
Itse käyttöjärjestelmäversioille avaa Xcoden Settings > Platforms (vanhemmissa Xcode-versioissa Components). Näet jokaisen asennetun simulaattoriversion kokoineen; valitse vanha ja poista se. Säilytä vain uusin versio alustaa kohden, ellet aktiivisesti testaa vanhemmilla käyttöjärjestelmillä.
Voit karsia myös yksittäisiä simuloituja laitteita kohdassa Window > Devices and Simulators: siirry Simulators-välilehdelle, klikkaa hiiren oikealla mitä tahansa laitetta, jota et koskaan käytä — ne kuusi identtistä iPhone-mallia vanhojen testiajojen datoineen — ja valitse Delete. Kunkin laitteen tallennetut tiedot ja sovellukset lähtevät mukana.
Arkistot, laitetukitiedostot ja välimuistit
Arkistoja kertyy polkuun ~/Library/Developer/Xcode/Archives joka kerta, kun ajat Product > Archive jaellaksesi käännöksen. Jokainen arkisto sisältää täyden sovelluskäännöksen sekä sen dSYM-virheenjäljityssymbolit, usein 100 Mt – 1 Gt kappaleelta. Ennen poistoa tunne kompromissi: sisällä olevat dSYM:t ovat se, minkä avulla symbolikoit juuri kyseisen käännöksen kaatumisraportit. Säilytä arkistot versioista, jotka ovat yhä App Storessa tai TestFlightissa (tai varmista, että App Store Connectissa on dSYM:t), ja poista loput — turvallisin reitti on Xcoden Organizer (Window > Organizer > Archives), jossa voit tarkastella ja poistaa niitä asiayhteydessään.
iOS DeviceSupport, polussa ~/Library/Developer/Xcode/iOS DeviceSupport, sisältää virheenjäljityssymbolit, jotka Xcode kopioi jokaisesta koskaan kytkemästäsi fyysisestä 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 puhdasta painolastia: poista ne, ja jos joskus taas kytket kyseistä versiota käyttävän laitteen, Xcode kopioi symbolit yksinkertaisesti uudelleen (näet kerran ilmoituksen ”Preparing debugger support”). Vastaavat kansiot ovat olemassa myös watchOS- ja tvOS-laitteille.
Xcode pitää myös omia välimuistejaan polussa ~/Library/Caches/com.apple.dt.Xcode, ja simulaattorit omiaan polussa ~/Library/Developer/CoreSimulator/Caches — molemmat on turvallista tyhjentää, kun Xcode ja Simulator-sovellus eivät ole käynnissä, ja molemmat rakentuvat tarvittaessa uudelleen.
Pakettienhallintojen välimuistit (SwiftPM, CocoaPods, npm, Homebrew)
Pakettienhallinnat säilyttävät jokaisen koskaan lataamansa riippuvuuden, jotta tulevat asennukset olisivat nopeita. Se on hyvää insinöörityötä ja huonoa levyhygieniaa: välimuistit vain kasvavat, ja muutaman projektivuoden nähneellä koneella niihin kertyy huomaamatta 10–20 Gt. Kaikki niistä on turvallista tyhjentää — pahimmassa tapauksessa seuraava asennus lataa paketit uudelleen.
Swift Package Manager tallentaa lataamansa paketit polkuun ~/Library/Caches/org.swift.swiftpm, ja kunkin projektin ratkaistut checkoutit sijaitsevat myös sen DerivedData-kansiossa — joten DerivedDatan tyhjentäminen siivoaa jo ne. Jaetun välimuistin voit poistaa Finderista tai rm -rf:llä 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 lähtee.
npm:n välimuisti asuu polussa ~/.npm ja voi kasvaa monen gigatavun kokoiseksi JavaScript-painotteisella koneella. Aja npm cache clean --force tyhjentääksesi sen (npm vaatii lipun, koska välimuisti on itsekorjautuva eikä normaalisti kaipaa siivousta — sen poistaminen on silti täysin turvallista). pnpm-käyttäjät voivat ajaa sen sijaan pnpm store prune.
Homebrew hamstraa vanhoja latauksia ja vanhentuneita pakettiversioita. brew cleanup poistaa vanhentuneet versiot ja tunkkaiset lataukset; brew cleanup --prune=all tyhjentää lisäksi koko latausvälimuistin. Aja ensin brew cleanup -n, jos haluat kuivaharjoitteluna listan siitä, mitä lähtisi.
Automatisoi se
Kaikki yllä oleva toimii, mutta kehittäjäroska on juoksumatto: DerivedData on takaisin viikossa normaalia työtä, välimuistit täyttyvät uudelleen, ja jokainen Xcode-päivitys jättää jälkeensä taas yhden orvon käyttöjärjestelmäversion. Jos et halua toistaa kuutta manuaalista toimenpidettä joka kuukausi, tämä on se osa, joka kannattaa automatisoida — työkalulla, joka näyttää päättelynsä sen sijaan, että poistaisi hiljaa massoittain.
AskClean kohtelee kehittäjätiedostoja ensiluokkaisina kategorioina: yksi skannaus erittelee Xcoden DerivedDatan projekteittain, vanhat simulaattoriversiot (luettuna simctl:n kautta, uusin säilytetään alustaa kohden), laitetukitiedostot sekä pakettienhallintojen välimuistit npm:lle, SwiftPM:lle, cargolle, uv:lle ja muille. Se nappaa myös uudemmat tilasyöpöt — Hugging Facen ja Ollaman mallivälimuistit — jotka se listaa malli kerrallaan ja jättää oletuksena valitsematta.
Jokaisen kohteen mukana tulee selitys — mikä se on, voiko sen luoda uudelleen, mitä poistaminen maksaa — eikä mitään suoriteta ennen kuin vahvistat sen. Poistot menevät Roskakoriin, joten virheklikkaus on yhden vedon päässä perutusta, eikä lähdekoodiisi, dokumentteihisi tai kuviisi kosketa koskaan. Se on sama tarkistuslista kuin tämä opas — miinus tunti Terminaali-työtä.
FAQ
Onko DerivedDatan poistaminen turvallista?
Kyllä — se on yksi turvallisimmista suurista poistoista Macilla. DerivedData sisältää vain tiedostoja, jotka Xcode generoi lähteestäsi: käännöstuotteita, moduulivälimuisteja, indeksejä ja lokeja. Koodisi, projektitiedostosi ja git-historiasi asuvat muualla, eikä niihin kosketa koskaan. Ainoa seuraus on, että kunkin projektin seuraava käännös on täysi uudelleenkäännös ja indeksointi ajetaan uudelleen.
Kuinka usein DerivedData kannattaa tyhjentää?
Pakollista aikataulua ei ole — tyhjennä se, kun se on kyllin suuri merkitäkseen, mikä useimmille aktiivisille kehittäjille tarkoittaa kuukauden tai parin välein. Kaksi hetkeä oikeuttaa sen aina: kun tarvitset levytilaa nopeasti, ja kun projekti näyttää selittämättömiä käännösvirheitä tai vanhentunutta koodintäydennystä — silloin DerivedDatan pyyhkiminen on vakiintunut ensimmäinen korjaus.
Onko Xcode hitaampi DerivedDatan poistamisen jälkeen?
Tilapäisesti kyllä. Kunkin projektin ensimmäinen käännös on puhdas käännös, joka voi kestää moninkertaisesti inkrementaaliseen verrattuna, ja taustaindeksointi tarvitsee muutaman minuutin ennen kuin koodintäydennys ja haku ovat täysin palanneet. Ensimmäisen kierroksen jälkeen suorituskyky on täsmälleen entisensä — DerivedData sisältää välimuisteja, ei optimointeja, jotka menettäisit pysyvästi.
Entä ~/Library/Developer/CoreSimulator — voinko poistaa sen?
Et sokkona — se sisältää parhaillaan asennetut simulaattorisi ja niiden datan, ja sen poistaminen kokonaisuudessaan rikkoo ne, kunnes asennat käyttöjärjestelmäversiot uudelleen. Karsi se sen sijaan kunnolla: aja xcrun simctl delete unavailable orvoille laitteille, poista vanhat versiot Xcoden Settings > Platforms -kohdasta, poista käyttämättömät laitteet Devices and Simulators -ikkunassa ja tyhjennä käsin vain Caches-alikansio.
Tekeekö Clean Build Folder saman asian?
Ei. Product > Clean Build Folder (Komento-Vaihto-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 levytilatyökalu — todellisen tilan vapauttaminen tarkoittaa itse DerivedData-kansioiden poistamista.
Sources