AskClean

Xcode: Clean Build Folder czy usunięcie DerivedData?

Zespół AskClean · Zaktualizowano 2026-11-02

Clean Build Folder czyści produkty kompilacji otwartego schematu (scheme). Usunięcie DerivedData resetuje znacznie więcej: oprócz produktów kompilacji także indeksy, pamięci podręczne modułów i logi. Gdy kompilacja się psuje, zacznij od Clean Build Folder; przy uszkodzonym indeksie usuń folder DerivedData tylko tego jednego projektu, a żeby naprawdę odzyskać miejsce na dysku, usuń foldery DerivedData projektów, których już nie kompilujesz.

Różnica dotyczy zakresu, a nie dokładności

Polecenie Product > Clean Build Folder (Shift-Command-K) działa w obrębie projektu i schematu, które masz akurat otwarte. Usuwa skompilowane produkty i pliki pośrednie dla tego kontekstu, więc następna kompilacja zaczyna się od kodu źródłowego. Obejmuje jeden projekt i celowo zostawia to, czego odtworzenie kosztuje najwięcej czasu.

DerivedData to katalog najwyższego poziomu, wspólny dla wszystkich projektów korzystających z domyślnej lokalizacji — ~/Library/Developer/Xcode/DerivedData, z jednym podfolderem dla każdego projektu lub workspace’u otwartego kiedykolwiek w Xcodzie. Usunięcie jednego podfolderu resetuje dokładnie ten projekt. Usunięcie całego katalogu sprawia, że przy następnym otwarciu każdy Twój projekt zostanie skompilowany i zindeksowany od nowa.

Nie chodzi więc o „lekkie” i „głębokie” czyszczenie. Clean Build Folder ma wąski zakres i niewielki koszt; usunięcie DerivedData ma szeroki zakres i kosztuje Cię utratę indeksu. Które rozwiązanie jest właściwe, zależy wyłącznie od tego, czy to, co się zepsuło, znajduje się w produktach kompilacji, czy poza nimi.

Gdy kompilacja się psuje, zacznij od najwęższej opcji

Jeśli błąd pojawił się zaraz po przełączeniu gałęzi, zmianie konfiguracji kompilacji lub edycji plików zasobów, zamknij uruchomioną aplikację i najpierw użyj Clean Build Folder. To najtańszy dostępny reset: zachowuje indeks i pozwala wrócić do pracy po jednej kompilacji, a nie po kompilacji i kilku minutach indeksowania.

Do usunięcia folderu DerivedData tego projektu przejdź wtedy, gdy objawy nie dotyczą w istocie produktów kompilacji: Xcode pokazuje błędy w kodzie, który już poprawiono, przejście do definicji (Jump to Definition) prowadzi w złe miejsce, a autouzupełnianie przestało rozpoznawać Twoje własne typy. To objawy problemów z indeksem, a Clean Build Folder indeksu nie rusza.

Warto znać jeden konkretny przypadek, bo to zwykle on sprawia, że „czyszczenie nic nie dało” zamienia się w „usunięcie DerivedData pomogło”: pamięć podręczna prekompilowanych modułów (ModuleCache.noindex) leży w katalogu głównym DerivedData, a nie w podfolderze któregokolwiek projektu. Clean Build Folder nigdy do niej nie sięga. Gdy po zmianie SDK lub zestawu narzędzi (toolchain) pamięć podręczna modułów staje się nieaktualna, błąd znika dopiero po jej usunięciu.

Żadne z tych poleceń nie naprawi prawdziwego błędu w kodzie źródłowym ani w zależnościach. Jeśli ten sam błąd pojawia się także po czystej kompilacji, przestań czyścić i przeczytaj komunikat kompilatora — przyczyna leży w ustawieniach projektu, Package.resolved, wybranym SDK albo w samym kodzie.

Żadne z nich nie jest sposobem na pełny dysk

Clean Build Folder to narzędzie diagnostyczne, które przy okazji zwalnia trochę miejsca. Może odzyskać przestrzeń zajmowaną przez bieżący projekt, ale produkty kompilacji wszystkich pozostałych projektów, wszystkie indeksy i pamięć podręczna modułów zostają dokładnie tam, gdzie były. Używanie go do odzyskiwania miejsca na dysku mija się z celem.

Jeśli naprawdę chodzi o miejsce, działaj odwrotnie: najpierw zmierz podfoldery DerivedData, a potem usuń foldery projektów, których nie otwierasz od miesięcy. To zwykle tam leżą dziesiątki gigabajtów — jednorazowe klony, zbudowane raz i nigdy więcej nieotwierane.

Nie zaczynaj od rm -rf. W Finderze możesz przenieść wybrane foldery do Kosza, z którego da się je odzyskać, dopóki go nie opróżnisz — ta różnica ma znaczenie, gdy pierwszy raz usuniesz folder projektu, który akurat się kompiluje. Terminal opłaca się przy automatyzacji, ale dopiero gdy potwierdzisz dokładną ścieżkę.

Sprawdź wynik, zamiast ufać liczbom

Zanim cokolwiek zrobisz, zapisz rozmiar DerivedData, zastosuj dokładnie jedną z dwóch opcji i zmierz ponownie. Po Clean Build Folder skompiluj bieżący schemat. Po usunięciu folderu DerivedData otwórz Xcode i poczekaj, aż zakończą się pierwsza kompilacja i indeksowanie.

Taka kolejność pozwala oddzielić odzyskane miejsce od ceny jego odzyskania. Nie ma uniwersalnej wartości, której można się spodziewać: wynik zależy od tego, ile projektów, konfiguracji i architektur kompilowano na tym konkretnym Macu.

Które rozwiązanie wybrać

SytuacjaCo zrobićKoszt odtworzenia
Kompilacja bieżącego schematu się nie udajeProduct > Clean Build FolderJedna ponowna kompilacja tego projektu. Indeksy wszystkich projektów zostają zachowane.
Nieaktualne błędy, niedziałające przejście do definicji~/Library/Developer/Xcode/DerivedData/<project>Pełna kompilacja i ponowne indeksowanie, tylko dla tego projektu.
Błędy po zmianie SDK nie znikają po Clean Build Folder~/Library/Developer/Xcode/DerivedData/ModuleCache.noindexModuły zostaną ponownie skompilowane przy następnej kompilacji. Clean Build Folder tu nie sięga.
Naprawdę potrzebujesz miejsca na dysku~/Library/Developer/Xcode/DerivedDataUsuń duże, nieaktualne podfoldery; te projekty skompilują się od nowa przy następnym otwarciu.
Stare środowiska uruchomieniowe symulatorówXcode Settings > ComponentsTo zupełnie osobna kategoria. Żadne z tych poleceń jej nie dotyka.

Tabela opisuje zakres działania, a nie obiecaną liczbę gigabajtów. Zmierz zajętość dysku przed czyszczeniem i po nim.

FAQ

Czy Clean Build Folder usuwa DerivedData?

Nie. Czyści produkty kompilacji otwartego projektu i schematu. To nie to samo co usunięcie wspólnego katalogu DerivedData, który przechowuje także indeksy, pamięć podręczną modułów i logi wszystkich projektów.

Czy usunięcie folderu DerivedData jednego projektu jest bezpieczne?

Tak. Wszystko w nim powstaje z Twojego kodu źródłowego i Xcode może to odtworzyć. Twój kod i historia Gita pozostają nietknięte. Jedyny koszt: pierwsza kompilacja po usunięciu będzie pełna, a po niej nastąpi indeksowanie.

Czy najpierw trzeba zamknąć Xcode?

Przy ręcznym usuwaniu DerivedData — tak: dzięki temu indekser nie będzie blokował ani odtwarzał plików, które właśnie usuwasz. Przy wbudowanym poleceniu Clean Build Folder — nie; Xcode robi to sam u siebie.

Dlaczego po czyszczeniu błąd nadal występuje?

Najprawdopodobniej przyczyną nigdy nie była pamięć podręczna. Sprawdź komunikat kompilatora, ustawienia schematu, wersje zależności, Package.resolved, wybrany SDK i to, co faktycznie zmieniło się w bieżącej gałęzi.

Clean Build Folder nic nie dał, a usunięcie DerivedData pomogło. Dlaczego?

Zwykle chodzi o pamięć podręczną prekompilowanych modułów. ModuleCache.noindex leży w katalogu głównym DerivedData, a nie w podfolderze projektu, więc Clean Build Folder do niej nie sięga — usunięcie DerivedData tak.

Źródła

Więcej o miejscu zajmowanym przez Xcode