Clean Build Folder или удалить DerivedData: в чём разница?
Команда AskClean · Обновлено 2026-07-28
Проверено инженерной командой AskClean · Методика тестирования и редакционные правила
Clean Build Folder очищает продукты сборки текущего проекта, а удаление DerivedData сбрасывает более широкий набор данных: продукты, индексы, кеши модулей и журналы. Для локальной ошибки сборки начните с Clean Build Folder; для освобождения места или повреждённого индекса удаляйте DerivedData выбранного проекта.
Короткий ответ: область очистки разная
Product > Clean Build Folder (Shift-Command-K) работает в контексте открытого проекта и выбранной схемы. Команда заставляет Xcode заново собрать продукты, но не обязана сбрасывать все индексы и данные других проектов.
DerivedData — каталог верхнего уровня для всех проектов, которые используют стандартное расположение. Удаление одной его подпапки сбрасывает проект точечно; удаление всего каталога заставляет каждый проект заново собраться и проиндексироваться.
Что выбрать при ошибке сборки
Если ошибка появилась после смены ветки, конфигурации или файлов ресурсов, сначала закройте запущенное приложение и выполните Clean Build Folder. Это самый дешёвый сброс: он сохраняет больше кешей и поэтому быстрее возвращает проект к работе.
Если Xcode показывает устаревшие ошибки, переход к определению ведёт не туда, автодополнение сломано или Clean Build Folder не помог, закройте Xcode и удалите DerivedData только проблемного проекта. Полный сброс всех проектов нужен редко.
Очистка не исправляет настоящую ошибку в исходном коде или зависимостях. Если одинаковая ошибка воспроизводится после чистой сборки, ищите причину в настройках проекта, Package.resolved, окружении или коде.
Что выбрать для освобождения места
Clean Build Folder — инструмент диагностики, а не полноценная уборка диска. Он может вернуть часть места, но старые проекты, индексы и другие данные DerivedData останутся. Для диска сначала измерьте подпапки DerivedData и удалите те проекты, к которым не возвращаетесь.
Не начинайте с rm -rf. Finder позволяет отправить выбранные папки в Корзину и восстановить их до очистки Корзины. Терминал полезен для автоматизации только после проверки точного пути.
Как проверить результат
Запишите размер DerivedData до действия, примените только один способ и измерьте снова. После Clean Build Folder соберите текущую схему; после удаления DerivedData откройте Xcode и дождитесь первой сборки и индексации.
Такое сравнение отделяет освобождённое место от цены восстановления. Универсальной цифры нет: результат зависит от числа проектов, конфигураций и архитектур, которые собирались на конкретном Mac.
Таблица выбора
| Сценарий | Действие | Цена восстановления |
|---|---|---|
| Сбой сборки текущей схемы | Product > Clean Build Folder | Повторная сборка текущего проекта; индексы других проектов сохраняются. |
| Повреждённый индекс одного проекта | ~/Library/Developer/Xcode/DerivedData/<project> | Полная сборка и индексация выбранного проекта. |
| Срочно нужно место | ~/Library/Developer/Xcode/DerivedData | Удаляйте крупные старые подпапки; затронутые проекты пересоберутся при следующем открытии. |
| Старые симуляторы | Xcode Settings > Components | Это отдельная категория; Clean Build Folder и DerivedData её не очищают. |
Таблица описывает область действия, а не обещает конкретное число гигабайт. Размер нужно измерять на вашем Mac до и после.
Частые вопросы
Clean Build Folder удаляет весь DerivedData?
Нет. Команда очищает продукты сборки текущего контекста, но не является эквивалентом удаления общего каталога DerivedData со всеми индексами и данными других проектов.
Безопасно ли удалить DerivedData одного проекта?
Да. Там лежат производные файлы, которые Xcode создаёт заново. Исходный код и история git не удаляются. Первая сборка и индексация займут больше времени.
Нужно ли закрывать Xcode?
Перед ручным удалением DerivedData — да. Это снижает риск, что индексатор одновременно держит или пересоздаёт файлы. Для встроенной команды Clean Build Folder закрывать Xcode не нужно.
Почему после очистки ошибка осталась?
Вероятно, причина не в кеше. Проверьте сообщение компилятора, настройки схемы, версии зависимостей, Package.resolved, выбранный SDK и изменения текущей ветки.
Источники