Levo-Anleitungen · Entwickler: Apple

DerivedData löschen: So geht’s, und ist das sicher?

Das Popover von Levo mit angehakten Xcode-Build-Daten in der Liste Ready to free, mit Größe und Grund

Ja, das ist sicher. DerivedData enthält nur Build-Ergebnisse, Indizes und Protokolle, die Xcode aus deinem Quellcode erzeugt. Löschen kostet dich also einen langsamen Build und sonst nichts. Beende vorher Xcode, und lösch den Ordner nicht, während ein Build oder Archiv läuft.

Was drin istWoWas beim Löschen passiert
Build-ProdukteDerivedData/<Project>-<hash>/BuildWerden beim nächsten Build neu erstellt
Index…/Index.noindexXcode indiziert neu, Suche und Vervollständigung sind eine Weile langsam
Protokolle…/LogsAlte Build-Protokolle verschwinden aus dem Report navigator
Swift-Pakete…/SourcePackagesPakete werden neu geladen, du brauchst also eine Internetverbindung
Modul-CacheDerivedData/ModuleCache.noindexWird neu erstellt, gilt für alle Projekte

So machst du es selbst

Der Ordner ist ~/Library/Developer/Xcode/DerivedData, mit einem Unterordner pro Projekt, benannt nach dem Projekt plus einem Hash. Wähl die Methode, die zu deinem Ziel passt.

  1. Ein Projekt, in Xcode. Wähle Product › Clean Build Folder (⇧⌘K). Das löscht die Build-Produkte des Projekts, lässt aber seinen Index stehen.
  2. Ein Projekt, im Finder. Öffne Xcode › Settings › Locations, klick auf den kleinen Pfeil neben Derived Data und leg den Ordner des Projekts in den Papierkorb.
  3. Alles, im Terminal. Bei beendetem Xcode:
du -sh ~/Library/Developer/Xcode/DerivedData
rm -rf ~/Library/Developer/Xcode/DerivedData/*

Der Ordner selbst kann bleiben. Fehlt er, legt Xcode ihn neu an. Bei Builds über die Kommandozeile mit -derivedDataPath löschst du stattdessen diesen Ordner.

Warte, wenn gerade ein Build, ein Archiv oder ein UI-Test läuft, oder wenn du im Flugzeug sitzt und Swift-Pakete nutzt: SourcePackages verschwindet mit und muss neu geladen werden. Willst du ihn behalten, lösch nur die Ordner Build und Index.noindex.

Verhält sich ein Projekt danach seltsam, setz auch die Pakete zurück, mit File › Packages › Reset Package Caches. Dasselbe gilt für die Caches von SwiftPM und CocoaPods.

Wenn das Löschen das Problem nicht löst

Entwickler leeren DerivedData, wenn ein Build hängt, und oft hilft das, weil ein veralteter Modul-Cache oder Index schuld ist. Wenn nicht, liegt das Problem woanders: ein Paket mit falscher Version, ein veralteter Pods-Ordner oder eine Signatur-Einstellung. Probier als Nächstes das Zurücksetzen der Pakete aus der Anleitung zu Paket-Caches.

Wächst der Ordner immer wieder auf 30 GB oder mehr, schau, welche Projektordner am größten sind: du -sh ~/Library/Developer/Xcode/DerivedData/* | sort -h. Jeder Branch und jeder Klon eines Projekts bekommt einen eigenen Ordner, weil der Hash aus dem Projektpfad entsteht. Zehn Checkouts einer App sind zehn Kopien.

Du kannst DerivedData auch woandershin verlegen, etwa auf ein externes Laufwerk, unter Xcode › Settings › Locations. Das funktioniert, aber Builds auf einem langsameren Laufwerk sind spürbar langsamer. Für die meisten ist regelmäßiges Leeren der bessere Kompromiss.

So macht es Levo

Levo zeigt den DerivedData-Ordner jedes Projekts in der Gruppe der Xcode-Build-Daten, mit Größe und dem Zeitpunkt des letzten Builds. Ordner von Projekten, die du lange nicht angefasst hast oder deren Quellordner weg ist, hakt Select › Smartly zuerst an. Das Projekt, das du heute Morgen gebaut hast, bleibt ohne Haken.

Solange Xcode, xcodebuild oder die Build-Dienste laufen, markiert Levo die Zeile als gesperrt und erklärt, warum. Du entfernst den Haken bei allem, was du behalten willst, dann klickst du auf Clean up. In Levo für iOS- und Mac-Entwickler steht die vollständige Liste, wonach es sucht.

FAQ

Ist es sicher, DerivedData zu löschen?

Ja. Der Ordner enthält Build-Ergebnisse, Indizes und Protokolle, die aus deinem Quellcode entstehen. Xcode legt ihn neu an, der erste Build danach dauert also länger.

Wo liegt DerivedData auf dem Mac?

In ~/Library/Developer/Xcode/DerivedData. Öffne in Xcode Settings und dann Locations und klick auf den Pfeil neben Derived Data, um den Ordner im Finder zu zeigen.

Verliere ich Breakpoints oder Schemes, wenn ich DerivedData lösche?

Nein. Die liegen in deinem Projekt oder Workspace, nicht in DerivedData. Du verlierst alte Build-Protokolle und den zwischengespeicherten Index.

Warum füllt Xcode DerivedData immer wieder?

Jeder Build schreibt dorthin, ein Ordner pro Projekt, dazu der Index. Große Projekte und viele Branches summieren sich auf zig Gigabyte, deshalb ist es normal, den Ordner alle paar Wochen zu leeren.