Każdego programistę iOS, macOS, watchOS i VisionOS doświadcza ten sam powracający koszmar: budzenie się i wyświetlanie alertu informującego, że na komputerze Mac pozostało mniej niż 5 GB miejsca na dysku. Nie pobrałeś żadnych gier ani filmów — więc gdzie podział się Twój dysk SSD o pojemności 512 GB? W 95% przypadków winowajcą są Xcode DerivedData i budowanie pamięci podręcznych.

Podczas aktywnej kompilacji Xcode generuje pośrednie pliki obiektów, prekompilowane nagłówki, tabele symboli indeksujących i pamięci podręczne modułów kompilatora. W ciągu miesięcy tworzenia różnych gałęzi i zależności foldery te nigdy nie są czyszczone samodzielnie. Oto, jak w czysty i bezpieczny sposób odzyskać od 50 GB do 100 GB miejsca na dysku dla programistów.

Dane pochodne Xcode i optymalizacja kompilacji pamięci podręcznej
Bezpieczne usuwanie produktów pośrednich i wykresów symboli w Apple Silicon.

Gdzie Xcode ukrywa swoje duże pamięci podręczne na dysku

Xcode dystrybuuje swoje tymczasowe produkty do kompilacji i pliki pomocnicze w pięciu głównych katalogach:

  • DerivedData (~/Library/Developer/Xcode/DerivedData): Pośrednie pliki obiektów, indeksowane bazy danych i produkty do kompilacji. Zużywa 20–60 GB.
  • Obsługa urządzeń iOS (~/Library/Developer/Xcode/iOS DeviceSupport): Symbole z każdego fizycznego iPhone'a lub iPada, jaki kiedykolwiek podłączałeś. Zużywa 5 GB–15 GB na wersję iOS.
  • Archiwa (~/Library/Developer/Xcode/Archives): Stare kompilacje .xcarchive zapisywane podczas tworzenia produkcyjnych wydań App Store. W ciągu roku może wzrosnąć do ponad 40 GB.
  • Pamięć podręczna menedżera pakietów Swift (~/Library/Caches/org.swift.swiftpm): Sklonowane repozytoria Git i skompilowane pliki binarne kasy dla zależności SPM.
  • XCTestDevices (~/Library/Developer/XCTestDevices): Osierocone tymczasowe klony symulatora utworzone podczas równoległych przebiegów testowych.

Czy usuwanie danych pochodnych jest bezpieczne?

Tak, zdecydowanie. DerivedData można w 100% regenerować. Następnym razem, gdy otworzysz projekt i naciśniesz Cmd+B, Xcode ponownie zaindeksuje Twój kod i skompiluje niezbędne pliki obiektowe. Jedynym kosztem jest nieco dłuższy początkowy czas kompilacji przy pierwszym uruchomieniu.

Ręczne usuwanie za pomocą terminala a MagicMacCleaner

Możesz usunąć DerivedData ręcznie, zamykając Xcode i uruchamiając: rm -rf ~/Library/Developer/Xcode/DerivedData/*. Jednak ręczne usunięcie terminala powoduje wyczyszczenie wszystkich projektów na raz – nawet tego, nad którym teraz pracujesz.

Dedykowany moduł Xcode Deep Clean programu MagicMacCleaner rozwiązuje ten problem, odczytując datę modyfikacji każdego podfolderu projektu. Pozwala zachować aktywne projekty w nienaruszonym stanie, jednocześnie usuwając nieaktywnych klientów i starsze repozytoria jednym kliknięciem.

Przebieg pracy dla programistów mobilnych: zwalnianie miejsca na testowych iPhone'ach

Podczas gdy czyszczenie pamięci podręcznej Xcode, środowisk wykonawczych symulatora i kontenerów kompilacji zwalnia istotne miejsce na komputerze Mac, fizyczne urządzenia testowe z systemem iOS szybko zapychają się kompilacjami testowymi, artefaktami awarii, nagraniami ekranu diagnostycznego i zrzutami ekranu kontroli jakości. Utrzymywanie oszczędnego sprzętu do testów fizycznych jest niezbędne do szybkiego debugowania na urządzeniu i niezawodnego wdrażania.

  • Clearly Smart Storage Cleaner: Kompresuje nagrania ekranu raportów o błędach obciążających gigabajty, wykrywa zduplikowane nośniki testowe i porządkuje nieuporządkowane kontakty na iPhone'ach programistycznych i osobistych.
  • Swipe Photo Cleaner: Szybko przeglądaj i usuwaj setki zrzutów ekranu z testów interfejsu użytkownika oraz serii demonstracji za pomocą łatwych gestów przesuwania w celu usunięcia.

Wskazówka dla programistów ekosystemu Apple: optymalizacja urządzenia testowego

Mało miejsca na podłączonych urządzeniach iOS może powodować przekroczenie limitu czasu wdrażania bezprzewodowego Xcode i błędy debugowania LLDB. Regularne czyszczenie multimediów na urządzeniu zapobiega błędom wdrażania tajemniczych kompilacji.