Guide di Levo · Sviluppatori: Apple

Come eliminare DerivedData, ed è sicuro?

L'elenco Ready to free di Levo con Xcode build data aperto, e sotto Simulators and emulators e Device support files

Sì, è sicuro. DerivedData contiene solo l'output di build, gli indici e i log che Xcode genera dal tuo codice, quindi eliminarlo ti costa una build lenta e nient'altro. Esci da Xcode prima, e non eliminarlo mentre è in corso una build o un archive.

Cosa c'è dentroDoveCosa succede se lo elimini
Prodotti di buildDerivedData/<Project>-<hash>/BuildSi ricostruiscono alla build successiva
Indice…/Index.noindexXcode reindicizza, quindi ricerca e completamento restano lenti per un po'
Log…/LogsI vecchi log di build spariscono dal Report navigator
Pacchetti Swift…/SourcePackagesI pacchetti vengono scaricati di nuovo, quindi ti serve la rete
Cache dei moduliDerivedData/ModuleCache.noindexSi ricostruisce, ed è condivisa da tutti i progetti

Come farlo da solo

La cartella è ~/Library/Developer/Xcode/DerivedData, con una sottocartella per progetto che porta il nome del progetto più un hash. Scegli il metodo adatto a quello che vuoi fare.

  1. Un solo progetto, da Xcode. Scegli Product › Clean Build Folder (⇧⌘K). Svuota i prodotti di build di quel progetto, ma lascia l'indice.
  2. Un solo progetto, nel Finder. Apri Xcode › Settings › Locations, fai clic sulla freccina accanto a Derived Data e sposta nel Cestino la cartella di quel progetto.
  3. Tutto, nel Terminale. Con Xcode chiuso:
du -sh ~/Library/Developer/Xcode/DerivedData
rm -rf ~/Library/Developer/Xcode/DerivedData/*

La cartella in sé può restare. Xcode la ricrea se manca. Per le build da riga di comando che usano -derivedDataPath, elimina invece quella cartella.

Aspetta se è in corso una build, un archive o un UI test, oppure se sei in aereo e usi i pacchetti Swift: sparisce anche SourcePackages e va riscaricato. Per conservarlo, elimina solo le cartelle Build e Index.noindex.

Se un progetto si comporta in modo strano dopo la pulizia, reimposta anche i pacchetti con File › Packages › Reset Package Caches. Lo stesso vale per le cache di SwiftPM e CocoaPods.

Quando svuotarlo non risolve

Chi sviluppa svuota DerivedData per sbloccare una build ferma, e spesso funziona perché la causa è una cache dei moduli o un indice non aggiornato. Quando non funziona, il problema è altrove: un pacchetto risolto su una versione sbagliata, una cartella Pods vecchia o un'impostazione di firma. Come passo successivo, prova il reset dei pacchetti nella guida alle cache dei pacchetti.

Se la cartella torna a 30 GB o più, guarda quali cartelle di progetto pesano di più: du -sh ~/Library/Developer/Xcode/DerivedData/* | sort -h. Ogni branch o clone di un progetto ha la propria cartella, perché l'hash dipende dal percorso del progetto. Dieci checkout della stessa app sono dieci copie.

Puoi anche spostare DerivedData altrove, su un disco esterno, da Xcode › Settings › Locations. Funziona, ma le build su un disco più lento sono parecchio più lente. Per quasi tutti conviene di più svuotarlo con una cadenza fissa.

Come fa Levo

Levo mostra la cartella DerivedData di ogni progetto nel gruppo Xcode build data, con la dimensione e la data dell'ultima build. Le cartelle dei progetti che non tocchi da tempo, o la cui cartella dei sorgenti non esiste più, vengono spuntate per prime da Select › Smartly. Quella che hai compilato stamattina resta senza spunta.

Mentre sono in esecuzione Xcode, xcodebuild o i servizi di build, Levo segna la riga come bloccata e spiega perché. Togli la spunta da ciò che vuoi tenere, poi clicca su Clean up. Levo per chi sviluppa per iOS e Mac ha l'elenco completo di ciò che cerca.

Domande frequenti

È sicuro eliminare DerivedData?

Sì. Contiene l'output di build, gli indici e i log generati dal tuo codice. Xcode lo ricostruisce, quindi la prima build successiva è più lenta.

Dov'è DerivedData su un Mac?

In ~/Library/Developer/Xcode/DerivedData. Apri Xcode Settings, poi Locations, e fai clic sulla freccia accanto a Derived Data per mostrarlo nel Finder.

Perdo i breakpoint o gli scheme se elimino DerivedData?

No. Sono salvati nel progetto o nel workspace, non in DerivedData. Perdi i vecchi log di build e l'indice in cache.

Perché Xcode continua a riempire DerivedData?

Ogni build scrive lì, una cartella per progetto, più l'indice. I progetti pesanti e i molti branch arrivano a decine di gigabyte, quindi svuotarlo ogni poche settimane è normale.