AskClean

Xcode: Clean Build Folder чи видалення DerivedData?

Команда AskClean · Оновлено 2026-11-02

Clean Build Folder очищує продукти збірки відкритої схеми. Видалення DerivedData скидає більше: крім продуктів збірки — індекси, кеші модулів і журнали. Якщо зламалася збірка, почніть із Clean Build Folder; якщо пошкоджено індекс, видаліть папку DerivedData лише цього проєкту; а щоб справді звільнити місце, видаліть папки DerivedData проєктів, які ви більше не збираєте.

Різниця — в охопленні, а не в ретельності

Product > Clean Build Folder (Shift-Command-K) працює в межах відкритого проєкту й схеми. Команда викидає скомпільовані продукти й проміжні файли для цього контексту, тож наступна збірка починається з вихідного коду. Вона стосується одного проєкту й навмисно зберігає те, що дорого відтворювати.

DerivedData — спільний каталог верхнього рівня для всіх проєктів, що використовують типове розташування: ~/Library/Developer/Xcode/DerivedData, по підпапці на кожен проєкт чи workspace, який ви колись відкривали. Видалення однієї підпапки скидає саме цей проєкт. Видалення всього каталогу змушує кожен ваш проєкт перезібратися й переіндексуватися під час наступного відкриття.

Тож чесно описувати цю пару як «легке» і «глибоке» очищення не варто. Clean Build Folder — вузький і дешевий інструмент, а видалення DerivedData — широкий, і ціна йому — індекс. Що з них доречне, залежить лише від того, де саме зламалося: усередині продуктів збірки чи поза ними.

Коли ламається збірка, починайте з вузького

Якщо помилка зʼявилася одразу після перемикання гілки, зміни конфігурації збірки чи редагування файлів ресурсів, зупиніть запущену програму і спершу виконайте Clean Build Folder. Це найдешевше скидання: індекс зберігається, і ви повертаєтеся до роботи за одну збірку, а не за збірку плюс кілька хвилин індексування.

Переходьте до видалення папки DerivedData цього проєкту, коли симптоми насправді не стосуються продуктів збірки: Xcode показує помилки в коді, який ви вже виправили, перехід до визначення веде не туди, автодоповнення перестало розуміти ваші власні типи. Це симптоми індексу, а Clean Build Folder індексу не торкається.

Є один окремий випадок, який варто знати, бо саме через нього «очистив — не допомогло» зазвичай перетворюється на «видалив DerivedData — допомогло»: кеш попередньо скомпільованих модулів (ModuleCache.noindex) лежить у корені DerivedData, а не в підпапці якогось проєкту. Clean Build Folder до нього не дістає. Коли кеш модулів застаріває після зміни SDK чи інструментарію, помилку усуває лише його видалення.

Жодна з команд не виправить справжньої помилки у вашому коді чи залежностях. Якщо та сама помилка лишається після чистої збірки, припиніть очищення й прочитайте повідомлення компілятора: причина — в налаштуваннях проєкту, Package.resolved, вибраному SDK або в самому коді.

Жоден із варіантів не є способом звільнити диск

Clean Build Folder — діагностичний інструмент, який заодно звільняє трохи байтів. Він може повернути місце для поточного проєкту, але продукти збірки інших проєктів, усі індекси й кеш модулів лишаються там, де були. Запускати його заради місця на диску — означає міряти не те.

Якщо мета справді місце, дійте навпаки: спершу виміряйте підпапки DerivedData, а потім видаліть проєкти, які ви не відкривали місяцями. Саме там зазвичай і лежать десятки гігабайтів — разові клони, які ви зібрали один раз і до яких не поверталися.

Не починайте з rm -rf. Finder дає змогу перемістити вибрані папки в Смітник, звідки їх можна повернути, доки ви його не очистили, — і ця різниця стане важливою, щойно ви вперше видалите папку проєкту, який саме зараз збирається. «Термінал» доречний для автоматизації, але лише після того, як ви перевірили точний шлях.

Перевіряйте результат, а не довіряйте цифрам

Перш ніж щось робити, запишіть розмір DerivedData, застосуйте лише один із двох варіантів і виміряйте знову. Після Clean Build Folder зберіть поточну схему. Після видалення папки DerivedData відкрийте Xcode й дочекайтеся завершення першої збірки та індексування.

Такий порядок відокремлює звільнене місце від ціни, яку ви за нього заплатили. Універсальної цифри немає: результат залежить від того, скільки проєктів, конфігурацій і архітектур збиралося на цьому конкретному Mac.

Що вибрати

СитуаціяЩо робитиЦіна відновлення
Не збирається поточна схемаProduct > Clean Build FolderОдна перезбірка цього проєкту. Індекси всіх проєктів зберігаються.
Застарілі помилки, зламаний перехід до визначення~/Library/Developer/Xcode/DerivedData/<project>Повна перезбірка й переіндексування — лише для цього проєкту.
Помилки лишаються після Clean Build Folder і зміни SDK~/Library/Developer/Xcode/DerivedData/ModuleCache.noindexМодулі перекомпілюються під час наступної збірки. Clean Build Folder сюди не дістає.
Вам справді потрібне місце на диску~/Library/Developer/Xcode/DerivedDataВидаліть великі застарілі підпапки; ці проєкти перезберуться, коли ви їх відкриєте.
Старі середовища симулятораXcode Settings > ComponentsОкрема категорія. Жодна з двох команд її не зачіпає.

Таблиця описує охоплення, а не обіцяну кількість гігабайтів. Виміряйте свій Mac до й після.

Часті запитання

Чи видаляє Clean Build Folder папку DerivedData?

Ні. Команда очищує продукти збірки відкритого проєкту й схеми. Це не те саме, що видалити спільний каталог DerivedData, де також зберігаються індекси, кеш модулів і журнали всіх проєктів.

Чи безпечно видалити папку DerivedData одного проєкту?

Так. Усе в ній похідне від вашого вихідного коду, і Xcode створить це знову. Ваш код та історія git не зачіпаються. Єдина ціна — перша збірка після цього буде повною, а за нею піде індексування.

Чи треба спершу закрити Xcode?

Якщо видаляєте DerivedData вручну — так: інакше індексатор може тримати або знову створювати файли, поки ви їх видаляєте. Для вбудованої команди Clean Build Folder — ні: Xcode робить це сам.

Чому помилка лишилася після очищення?

Найімовірніше, причина ніколи не була в кеші. Перевірте повідомлення компілятора, налаштування схеми, версії залежностей, Package.resolved, вибраний SDK і те, що насправді змінилося у вашій поточній гілці.

Clean Build Folder не допоміг, а видалення DerivedData допомогло. Чому?

Зазвичай через кеш попередньо скомпільованих модулів. ModuleCache.noindex лежить у корені DerivedData, а не в підпапці проєкту, тому Clean Build Folder до нього не дістає, а видалення DerivedData — так.

Джерела

Що ще почитати про сховище Xcode