Xcoden Clean Build Folder vai DerivedDatan poistaminen?
AskClean-tiimi · Päivitetty 2026-11-02
Clean Build Folder tyhjentää avoinna olevan skeeman (scheme) käännöstuotteet. DerivedDatan poistaminen nollaa laajemman kokonaisuuden: käännöstuotteiden lisäksi indeksit, moduulivälimuistit ja lokit. Jos käännös on rikki, aloita Clean Build Folderilla. Jos indeksi on vioittunut, poista vain kyseisen projektin DerivedData-kansio. Jos tarvitset oikeasti levytilaa, poista niiden projektien DerivedData-kansiot, joita et enää käännä.
Ero on laajuudessa, ei perusteellisuudessa
Product > Clean Build Folder (vaihto-komento-K) toimii avoinna olevan projektin ja skeeman sisällä. Se heittää pois kyseisen kontekstin käännetyt tuotteet ja välitiedostot, jotta seuraava käännös alkaa lähdekoodista. Komento rajautuu yhteen projektiin, ja se jättää tarkoituksella paikoilleen asiat, joiden rakentaminen uudelleen on kallista.
DerivedData taas on ylätason hakemisto, jota kaikki oletussijaintia käyttävät projektit jakavat: ~/Library/Developer/Xcode/DerivedData, jossa on oma alikansio jokaiselle koskaan avaamallesi projektille tai työtilalle. Yhden alikansion poistaminen nollaa täsmälleen sen projektin. Koko hakemiston poistaminen saa jokaisen projektisi kääntymään ja indeksoitumaan uudelleen, kun avaat sen seuraavan kerran.
Siksi niitä ei kannata kuvata ”kevyeksi” ja ”perusteelliseksi” siivoukseksi. Clean Build Folder on suppea ja halpa; DerivedDatan poistaminen on laaja, ja sen hintana menetät indeksin. Kumpi on oikea valinta, riippuu täysin siitä, onko vika käännöstuotteissa vai niiden ulkopuolella.
Kun käännös hajoaa, aloita suppeimmasta
Jos virhe ilmaantui heti sen jälkeen, kun vaihdoit haaraa, muutit käännöskonfiguraatiota tai muokkasit resurssitiedostoja, sulje käynnissä oleva sovellus ja käytä ensin Clean Build Folderia. Se on halvin tarjolla oleva nollaus, se säilyttää indeksin, ja pääset takaisin töihin yhdellä käännöksellä – ilman useiden minuuttien indeksointia sen päälle.
Siirry poistamaan kyseisen projektin DerivedData-kansio, kun oireet eivät varsinaisesti liity käännöstuotteisiin: Xcode näyttää virheitä koodista, jonka olet jo korjannut, määrittelyyn siirtyminen (jump to definition) vie väärään paikkaan tai koodintäydennys ei enää tunnista omia tyyppejäsi. Ne ovat indeksin oireita, eikä Clean Build Folder koske indeksiin.
Yksi erityistapaus kannattaa tuntea, koska se on tavallisin syy siihen, että ”siivosin, eikä se auttanut” muuttuu muotoon ”poistin DerivedDatan, ja se auttoi”: esikäännettyjen moduulien välimuisti (ModuleCache.noindex) on DerivedDatan juuressa, ei minkään projektin alikansiossa. Clean Build Folder ei ulotu siihen koskaan. Kun moduulivälimuisti vanhenee SDK:n tai työkaluketjun vaihdon jälkeen, vain sen poistaminen poistaa virheen.
Kumpikaan komento ei korjaa todellista virhettä lähdekoodissasi tai riippuvuuksissasi. Jos täsmälleen sama virhe toistuu puhtaassa käännöksessä, lopeta siivoaminen ja lue kääntäjän virheilmoitus – syy on projektin asetuksissa, Package.resolved-tiedostossa, valitussa SDK:ssa tai itse koodissa.
Kumpikaan ei ole levynsiivouskeino
Clean Build Folder on vianmääritystyökalu, joka sattuu vapauttamaan hieman tilaa. Nykyisen projektin osalta tilaa voi vapautua, mutta kaikkien muiden projektien käännöstuotteet, kaikki indeksit ja moduulivälimuisti pysyvät täsmälleen paikoillaan. Levytilan vapauttamiseen se on väärä työkalu.
Jos tavoite on oikeasti tila, toimi toisin päin: mittaa ensin DerivedDatan alikansiot ja poista sitten niiden projektien kansiot, joita et ole avannut kuukausiin. Juuri niissä kymmenet gigatavut yleensä ovat – kertaalleen käännetyissä klooneissa, joihin et koskaan palannut.
Älä aloita komennolla rm -rf. Finderissa voit siirtää valitut kansiot roskakoriin, josta ne voi palauttaa siihen asti, kunnes tyhjennät sen. Ero tuntuu viimeistään silloin, kun poistat ensimmäisen kerran sellaisen projektin kansion, jota käännetään juuri sillä hetkellä. Pääte on hyödyllinen automatisointiin, mutta vasta kun olet varmistanut täsmällisen polun.
Tarkista tulos – älä luota lukuun
Kirjaa DerivedDatan koko ennen kuin teet mitään, käytä täsmälleen yhtä kahdesta vaihtoehdosta ja mittaa sitten uudelleen. Clean Build Folderin jälkeen käännä nykyinen skeema. DerivedData-kansion poistamisen jälkeen avaa Xcode ja odota, että ensimmäinen käännös ja indeksointi ovat valmiit.
Kun etenet tässä järjestyksessä, näet erikseen, paljonko tilaa sait takaisin ja mitä sen saaminen maksoi. Yleispätevää lukua ei ole: tulos riippuu siitä, kuinka monta projektia, konfiguraatiota ja arkkitehtuuria juuri tällä Macilla on käännetty.
Kumpi valita
| Tilanne | Mitä tehdä | Mitä se maksaa |
|---|---|---|
| Käännös epäonnistuu nykyisellä skeemalla | Product > Clean Build Folder | Tämän projektin yksi uudelleenkäännös. Kaikkien projektien indeksit säilyvät. |
| Vanhentuneita virheitä, määrittelyyn siirtyminen ei toimi | ~/Library/Developer/Xcode/DerivedData/<project> | Täysi uudelleenkäännös ja uudelleenindeksointi vain kyseiselle projektille. |
| Virheet eivät poistu Clean Build Folderilla SDK:n vaihdon jälkeen | ~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex | Moduulit käännetään uudelleen seuraavassa käännöksessä. Clean Build Folder ei ulotu tähän. |
| Tarvitset oikeasti levytilaa | ~/Library/Developer/Xcode/DerivedData | Poista suuret vanhentuneet alikansiot; kyseiset projektit käännetään uudelleen, kun ne seuraavan kerran avataan. |
| Vanhat simulaattorien suoritusympäristöt | Xcode Settings > Components | Kokonaan erillinen luokka. Kumpikaan komento ei koske siihen. |
Taulukko kuvaa laajuutta, ei lupaa tiettyä gigatavumäärää. Mittaa oma Macisi ennen ja jälkeen.
UKK
Poistaako Clean Build Folder DerivedDatan?
Ei. Se tyhjentää avoinna olevan projektin ja skeeman käännöstuotteet. Se ei vastaa jaetun DerivedData-hakemiston poistamista, sillä hakemistossa ovat myös kaikkien projektien indeksit, moduulivälimuisti ja lokit.
Onko yhden projektin DerivedData-kansion poistaminen turvallista?
On. Kaikki sen sisältö on johdettu lähdekoodistasi, ja Xcode luo sen uudelleen. Koodisi ja Git-historiasi pysyvät koskemattomina. Ainoa hinta on, että seuraava käännös on täysi käännös, jonka jälkeen indeksointi ajetaan uudelleen.
Pitääkö Xcode sulkea ensin?
Jos poistat DerivedDatan käsin, kyllä – silloin indeksoija ei pidä tiedostoja auki tai luo niitä uudelleen samalla, kun poistat niitä. Sisäänrakennettua Clean Build Folder -komentoa varten sitä ei tarvitse sulkea; Xcode tekee siivouksen itse.
Miksi virhe ei poistunut siivouksen jälkeen?
Todennäköisesti syy ei koskaan ollut välimuistissa. Tarkista kääntäjän virheilmoitus, skeeman asetukset, riippuvuuksien versiot, Package.resolved, valittu SDK ja se, mikä nykyisessä haarassasi oikeasti muuttui.
Clean Build Folder ei auttanut, mutta DerivedDatan poistaminen auttoi. Miksi?
Syy on yleensä esikäännettyjen moduulien välimuisti. ModuleCache.noindex on DerivedDatan juuressa eikä projektin alikansiossa, joten Clean Build Folder ei ulotu siihen – DerivedDatan poistaminen ulottuu.
Lähteet