André Krämers Blog

Lösungen für Ihre Probleme

Wer eine Weile auf dem Mac mit Xamarin gearbeitet hat, wird irgendwann feststellen, dass der Festplattenplatz knapp wird. Dann heißt es natürlich Aufräumen. Die Frage ist nur: Was kann weg?

Bei mir war es gestern mal wieder so weit. Um herauszufinden, welche Dateien und Verzeichnisse besonders viel Platz benötigen, habe ich Daisy Disk genutzt. Das kleine Tool, das aktuell ca. 11 € kostet, zeigt übersichtlich an, welche Ordner und Dateien besonders speicherhungrig sind.

Screenshot von Daisy Disk

Daisy Disk hilft beim Aufräumen der Fesplatte

In meinem Fall konnte ich die Übeltäter Dank Daisy Disk schnell ausfindig machen:

  • Im Ordner ~/Library/Developer/CoreSimulator/Devices/ befanden sich ca. 11 GB
  • Unter ~/Library/Developer/Xcode/iOS DeviceSupport steckten ca. 20 GB

Beide Ordner gehören zu Xcode, welches als Voraussetzung für die Xamarin Entwicklung installiert sein muss. Bei mehr als 30 GB verbrauchtem Platz stellte sich natürlich schnell die Frage, ob die Inhalte der beiden Ordner tatsächlcih benötigt werden, oder ob ich sie löschen kann.

Eine kurze Internetrecherche brachte mich zu zwei Stackoverflow Posts:

~/Library/Developer/Xcode/iOS DeviceSupport

Im ersten der beiden Einträge wurde beschrieben, dass der Inhalt des Ordners ~/Library/Developer/Xcode/iOS DeviceSupport gefahrlos gelöscht werden kann. Der Ordner beinhaltet CrashLog Symbole für verschiedene angeschlossene iOS Geräte und Simulatoren. In meinem Fall waren viele der Inhalte bereits mehrere Jahre alt und stammten wohl von Simulatoren alter iOS Versionen, die ich schon lange nicht mehr im Einsatz habe.

Viel passieren kann beim Löschen nicht, da die Symboldateien beim nächsten Anschließen eines Geräts bzw. starten eines Simulators erneut vom Gerät auf den Mac heruntergeladen werden. Wichtig ist lediglich, dass man den Inhalt des Ordners ~/Library/Developer/Xcode/iOS DeviceSupport löscht und nicht den Ordner selbst.

~/Library/Developer/CoreSimulator/Devices/

Der zweite Stackoverflow Post verriet mir, dass im Ordner ~/Library/Developer/CoreSimulator/Devices/ die Daten der verschiedenen iOS Simulatoren liegen.

Da ich schon einige Xcode Updates hinter mir habe, befinden sich in diesem Ordner natürlich auch Daten von Simulatoren zu alten iOS Versionen, die ich schon lange nicht mehr nutze. Leider bestehen die Verzeichnisnamen der Unterverzeichnisse aus GUIDs und sind demnach wenig aussagekräftig. Wer nun also wissen möchte, welche GUID zu welchem Gerät gehört, der könnte im Terminal über

xcrun simctl list devices

eine Liste generieren, die vor jede GUID einen Klartextnamen schreibt:

== Devices ==
-- iOS 11.0 --
    iPhone 5s (4C215788-A8B3-4F41-B368-57908753E144) (Shutdown)
    iPhone 6 (824C8018-0F7E-418E-86AD-1DC84C7F2F93) (Shutdown)
    iPhone 6 Plus (BC4D7E42-24D4-4C8B-9C06-20A30B1C1E04) (Shutdown)
    iPhone 6s (8E4666F1-FF1B-401E-B4B7-F7A452CCCD1D) (Shutdown)
...

Aus dieser Liste könnte man sich dann die Geräte heraussuchen, die man nicht mehr im Einsatz hat und diese wie folgt löschen:

xcrun simctl delete <GUID>

Diese Vorgehensweise wäre natürlich recht aufwändig. Einfacher ist es Xcode selbst herausfinden zu lassen, welche Geräte nicht mehr verfügbar sind und die entsprechenden Daten zu löschen. Dies funktioniert recht komfortabel über folgenden Befehl:

xcrun simctl delete unavailable

~/Library/Caches/VisualStudio/7.0/TempDownload

Ein weiterer Ordner, der mit 2 GB relativ viel Platz auf meiner Festplatte belegte war der Ordner ~/Library/Caches/VisualStudio/7.0/TempDownload. Laut James Montemagnos Blog Post: Cleaning Up Space on Your Xamarin Development Machine kann auch der Inhalt dieses Ordners gefahrlos gelöscht werden.

~/Library/Caches/XamarinInstaller/Universal/downloads

Mehr also doppelt so viel Platz wie der Ordner ~/Library/Caches/VisualStudio/7.0/TempDownload benötigte mit 4,6 GB der Ordner ~/Library/Caches/XamarinInstaller/Universal/downloads auf meiner Festplatte. Laut den Kommentaren in James Blog Post handelt es sich auch hierbei um einen Ordner, der lediglich heruntergeladene Installationspakete cached. Der Ordnername sowie die Inhalte lassen darauf schließen, dass dem auch tatsächlich so ist. Da mein Visual Studio for Mac auch nach dem Löschen noch problemlos startete, gehe ich davon aus, dass auch dieser Ordner gefahrlos gelöscht werden kann.

bin, obj, packages oder node_modules Ordner

Ein weiterer Speicherfresser können bin, obj, packages oder node_modules Ordner sein, die unterhalb der eigenen Programmierprojekte angelegt werden. Diese lösche ich regelmäßig auf dem Mac mit folgendem Befehl im Terminal (innerhalb des Visual Studio Projektordners), den ich bei Stackoverflow gefunden habe.

find . -iname "bin" -o -iname "obj" -o -iname "packages" -o -iname "node_modules" | xargs rm -rf

Aus dem gleichen Stackoverflow Post habe ich auch folgenden Befehl, den ich mir unter Windows in einer .bat Datei abgelegt habe

for /d /r . %%d in (bin,obj,packages,node_modules) do @if exist "%%d" rd /s/q "%%d"

Die Batch Datei führe ich einfach unter Windows im Projektordner aus und lösche somit rekursiv alle bin, obj, packes und node_modules Ordner.

Fazit

Wer mit Xamarin und somit auch Xcode arbeitet hat schnell mehr Platz auf seiner Festplatte belegt als einem lieb ist. Glücklicherweise lässt sich mit Werkzeugen wie Daisy Disk schnell herausfinden, was die Speicherfresser im System sind. Sind es - wie in meinem Fall - gecachte oder veraltete Daten von Xcode oder Xamarin, dann lässt sich das Speicherproblem schnell und einfach mit ein paar Löschvorgängen beheben. Selbstverständlich sollte man beim Löschen vorsichtig vorgehen. Wer im Ordner ~/Library/ die falschen Ordner oder Dateien löscht zerschießt sich im schlimmsten Fall sein komplettes System.