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), когда симптомы связаны не с продуктами сборки: Xcode показывает ошибки в уже исправленном коде, переход к определению ведёт не туда, автодополнение перестало понимать ваши собственные типы. Это симптомы индекса, а Clean Build Folder индекс не трогает. Отдельный случай — кэш предкомпилированных модулей 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/<проект> | Полная пересборка и переиндексация — только этого проекта. |
| Ошибки модулей остаются после 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 и то, что на самом деле изменилось в текущей ветке.
Источники