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.
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.