AskClean

Как безопасно удалить DerivedData Xcode и кэши разработчика

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

DerivedData — служебная папка Xcode для продуктов сборки и индексов, и она может незаметно разрастись до десятков гигабайт. Удалять её безопасно: закройте Xcode, удалите содержимое ~/Library/Developer/Xcode/DerivedData, и при следующей сборке Xcode всё пересоздаст. Ниже — как это сделать, а также как разобраться с симуляторами, архивами и кэшами менеджеров пакетов.

Как безопасно удалить DerivedData Xcode и кэши разработчика
Как безопасно удалить DerivedData Xcode, убрать старые среды симулятора и очистить архивы, DeviceSupport и кэши менеджеров пакетов на Mac разработчика.

Что такое DerivedData и почему она разрастается

DerivedData — место, где Xcode хранит всё, что получает из вашего исходного кода: промежуточные объекты сборки, скомпилированные продукты, кэши модулей, индексы символов для автодополнения и перехода к определению, а также журналы сборки. По умолчанию папка находится в ~/Library/Developer/Xcode/DerivedData — по одной подпапке на каждый проект или workspace, который вы когда-либо открывали.

Растёт она по понятной причине: Xcode создаёт папку DerivedData для каждого открытого проекта — включая разовые клоны, которые вы собрали однажды и больше не открывали, — и сам их не удаляет. В каждой папке лежат отдельные продукты сборки для каждой конфигурации и назначения (Debug и Release, симулятор и устройство), поэтому измеряйте подпапки проектов, а не рассчитывайте на какую-то универсальную цифру.

Всё её содержимое по определению можно пересоздать — именно это и значит «derived», «производный». Удаление DerivedData никогда не затрагивает исходный код, настройки проекта и вообще ничего из того, что находится под контролем версий. Единственная цена — время: следующая сборка каждого проекта будет полной, а индексация ещё несколько минут поработает в фоне.

Как удалить DerivedData

Команда Clean Build Folder (Product > Clean Build Folder или Shift-Command-K) очищает продукты сборки только текущего открытого проекта: она помогает починить странную сборку, но на свободное место почти не влияет. Чтобы действительно освободить место, удаляйте сами папки DerivedData: откройте их из настроек Locations в Xcode, перейдите к папке в Finder или удалите её в «Терминале». Все три способа приводят к одному результату.

Удаление по проектам — точечный вариант: оставьте DerivedData двух-трёх проектов, которые собираете каждый день, и удалите папки всех остальных. Удалить всё целиком — быстрый вариант, и он тоже допустим: просто цену полной пересборки вы заплатите сразу за все проекты.

  1. Сначала закройте Xcode. Если удалять DerivedData при работающем Xcode, индексатор может сбиться, а файлы, которые Xcode держит открытыми, могут удалиться не полностью.
  2. Найдите папку: в Xcode откройте Settings > Locations и нажмите маленькую стрелку рядом с путём DerivedData, чтобы показать папку в Finder. Или в Finder нажмите Command-Shift-G и введите путь ~/Library/Developer/Xcode/DerivedData.
  3. Отсортируйте подпапки проектов по размеру, выделите ненужные (или все — Command-A) и переместите их в Корзину. Сначала в Корзину — более безопасная привычка: если передумаете, всё можно сразу вернуть.
  4. Вариант для «Терминала»: rm -rf ~/Library/Developer/Xcode/DerivedData удаляет всё одной командой. Для очень больших папок это быстрее Finder, но сначала прочтите примечание ниже.
  5. Снова откройте Xcode и соберите проект. Первая сборка каждого проекта будет заметно дольше, а в панели активности какое-то время будет идти «Indexing» — и то и другое происходит один раз.

Осторожнее с rm -rf: команда минует Корзину и удаляет безвозвратно, без возможности отмены. Вводите путь точно, никогда не запускайте её для этой задачи с sudo, а если в «Терминале» вам неуютно — путь через Finder делает то же самое, но обратимо.

Очистите старые среды симулятора

Симуляторы — часто ещё одна крупная категория хранилища разработчика. Каждая загруженная среда выполнения iOS, watchOS или tvOS занимает своё место, а каждое симулируемое устройство хранит данные в ~/Library/Developer/CoreSimulator/Devices. Если вы пережили несколько обновлений Xcode, проверьте среды для версий ОС, которые уже выпали из вашей тестовой матрицы.

Самый быстрый выигрыш даёт встроенная команда очистки: выполните в «Терминале» xcrun simctl delete unavailable. Она удаляет все устройства-симуляторы, помеченные как недоступные (unavailable), — в основном «осиротевшие» устройства, оставшиеся от удалённых сред выполнения и старых версий Xcode, — вместе с приложениями и данными внутри них. Сначала просмотрите список командой xcrun simctl list devices, особенно если у вас установлено несколько версий Xcode.

Сами среды выполнения удаляйте в Xcode: Settings > Components (в Xcode 14–15 — Platforms). Там видна каждая установленная среда симулятора и её размер; выберите старую и удалите её. Оставляйте только последнюю среду для каждой платформы, если вы целенаправленно не тестируете на старых версиях ОС.

Отдельные симулируемые устройства можно удалить в Window > Devices and Simulators: откройте вкладку Simulators, щёлкните правой кнопкой устройство, которым не пользуетесь, — например, одну из шести одинаковых моделей iPhone с данными старых тестовых прогонов — и выберите Delete. Сохранённые данные и приложения устройства удалятся вместе с ним.

Архивы, файлы поддержки устройств и кэши

Архивы накапливаются в ~/Library/Developer/Xcode/Archives каждый раз, когда вы выполняете Product > Archive, чтобы распространить сборку. Каждый архив содержит полную сборку приложения и её отладочные символы dSYM — часто от 100 МБ до 1 ГБ на архив. Прежде чем удалять, учтите компромисс: именно dSYM внутри нужен для символикации отчётов о сбоях этой конкретной сборки. Оставьте архивы версий, которые ещё доступны в App Store или TestFlight (или убедитесь, что их dSYM есть в App Store Connect), а остальные удалите — безопаснее всего через Organizer в Xcode (Window > Organizer > Archives), где каждый архив виден в контексте.

iOS DeviceSupport (~/Library/Developer/Xcode/iOS DeviceSupport) хранит отладочные символы, которые Xcode копирует с каждого физического iPhone или iPad, когда-либо подключённого к этому Mac, — по папке на версию iOS, обычно по 2–5 ГБ каждая. Папки версий iOS, на которых уже не работает ни одно ваше устройство, — чистый балласт: удаляйте их, а если когда-нибудь снова подключите устройство с этой версией, Xcode просто заново скопирует символы (один раз появится «Preparing debugger support»). Такие же папки есть и для устройств watchOS и tvOS.

Свои кэши Xcode хранит также в ~/Library/Caches/com.apple.dt.Xcode, а симуляторы — в ~/Library/Developer/CoreSimulator/Caches. Обе папки пересоздаются по мере необходимости, но очищайте их, только когда Xcode и приложение Simulator закрыты, а незнакомые вам файлы в кэшах CoreSimulator не трогайте.

Кэши менеджеров пакетов (SwiftPM, CocoaPods, npm, Homebrew)

Менеджеры пакетов хранят скачанные зависимости, чтобы следующие установки шли быстрее. Это полезно, но на Mac с многолетней историей проектов такие кэши могут стать заметной категорией. Их можно восстановить, но при следующей установке пакеты придётся скачать заново.

Swift Package Manager кэширует скачанные пакеты в ~/Library/Caches/org.swift.swiftpm, а рабочие копии зависимостей каждого проекта лежат ещё и в его папке DerivedData, так что очистка DerivedData удаляет и их. Общий кэш можно удалить в Finder или командой rm -rf для этого пути.

CocoaPods хранит скачанные pods в ~/Library/Caches/CocoaPods. Правильный способ очистить этот кэш — встроенная команда pod cache clean --all. Папки Pods в ваших проектах не затрагиваются: удаляется только кэш загрузок.

Кэш npm находится в ~/.npm и на Mac, где много JavaScript-проектов, может занимать много гигабайт. Чтобы очистить его, выполните npm cache clean --force (npm требует этот флаг, потому что кэш самовосстанавливающийся и обычно не нуждается в чистке; удалять его безопасно — при следующей установке пакеты просто скачаются заново). Пользователи pnpm могут вместо этого выполнить pnpm store prune.

Homebrew копит старые загрузки и устаревшие версии пакетов. brew cleanup удаляет устаревшие версии и залежавшиеся загрузки, а при запуске без имён пакетов к тому же удаляет зависимости, которые больше ничему не нужны (если не задана переменная HOMEBREW_NO_AUTOREMOVE); brew cleanup --prune=all дополнительно очищает весь кэш загрузок. Чтобы сначала увидеть список того, что будет удалено, выполните brew cleanup -n.

Автоматизируйте рутину

Всё описанное работает, но уборка за разработчиком — это бег по кругу: DerivedData снова вырастает за неделю обычной работы, кэши наполняются заново, а каждое обновление Xcode оставляет ещё одну ненужную среду выполнения. Если не хочется каждый месяц повторять шесть ручных процедур, именно эту часть стоит автоматизировать — с инструментом, который объясняет свои решения, а не молча удаляет всё пачками.

AskClean выделяет файлы разработчика в отдельные категории: одно сканирование отдельно показывает DerivedData Xcode для каждого проекта, старые среды симулятора (их список берётся через simctl, последняя среда для каждой платформы сохраняется), файлы поддержки устройств и кэши менеджеров пакетов — npm, SwiftPM, cargo, uv и других. Находит оно и новых «пожирателей» места — локальные ИИ-модели: модели Hugging Face показывает по одной, а библиотеку моделей Ollama — одним пунктом, и по умолчанию ничего из этого не отмечает.

К каждому объекту прилагается пояснение — что это, можно ли его пересоздать и во что обойдётся удаление, — и ничего не удаляется, пока вы не подтвердите. Подтверждённые объекты удаляются безвозвратно, а не перемещаются в Корзину, поэтому проверяйте выбор перед подтверждением; исходный код и медиатеку «Фото» AskClean не трогает. Это тот же чек-лист, что и в этом руководстве, только без часа работы в «Терминале».

Что пересоздаётся, а что — нет

КатегорияРасположение по умолчаниюПоследствие удаления
DerivedData~/Library/Developer/Xcode/DerivedDataПересборка и переиндексация; исходный код и история git не затрагиваются.
Устройства симулятора~/Library/Developer/CoreSimulator/DevicesПриложения и тестовые данные выбранных устройств пропадут; удаляйте их через simctl или Xcode.
Архивы~/Library/Developer/Xcode/ArchivesМожно потерять dSYM, нужные для символикации сбоев; сначала проверьте архивы в Organizer.
DeviceSupport~/Library/Developer/Xcode/iOS DeviceSupportСимволы будут скопированы снова, если подключить устройство с этой версией ОС.

Это карта последствий, а не обещание сэкономить определённое число гигабайт. Измеряйте место на своём Mac до и после очистки: скрипт из руководства по хранилищу симуляторов Xcode показывает размеры этих папок, ничего не меняя.

Частые вопросы

Безопасно ли удалять DerivedData?

Да — это одно из самых безопасных крупных удалений на Mac. В DerivedData лежат только файлы, которые Xcode создаёт из вашего исходного кода: продукты сборки, кэши модулей, индексы и журналы. Ваш код, файлы проекта и история git хранятся в другом месте и не затрагиваются. Единственное последствие — следующая сборка каждого проекта будет полной, а индексация запустится заново.

Как часто чистить DerivedData?

Обязательного графика нет: чистите, когда папка выросла настолько, что это заметно, — у большинства активных разработчиков это раз в месяц-два. Два случая оправдывают очистку всегда: когда место на диске нужно срочно и когда проект выдаёт необъяснимые ошибки сборки или устаревшее автодополнение. В таких случаях сброс DerivedData — стандартный первый шаг.

Станет ли Xcode медленнее после удаления DerivedData?

Временно — да. Первая сборка каждого проекта будет полной и может занять в несколько раз больше времени, чем инкрементальная, а фоновой индексации нужно несколько минут, чтобы автодополнение и поиск снова заработали в полную силу. После этого первого цикла производительность будет прежней: в DerivedData хранятся кэши, а не оптимизации, которые теряются навсегда.

А папку ~/Library/Developer/CoreSimulator можно удалить?

Не вслепую: в ней лежат установленные симуляторы и их данные, и если удалить её целиком, симуляторы перестанут работать, пока вы не переустановите среды выполнения. Лучше прореживайте её правильно: выполните xcrun simctl delete unavailable для «осиротевших» устройств (их приложения и данные удалятся вместе с ними), удалите старые среды в Xcode через Settings > Components, уберите неиспользуемые устройства в Devices and Simulators, а вручную очищайте только подпапку Caches — и только когда Xcode и Simulator закрыты.

Clean Build Folder делает то же самое?

Нет. Product > Clean Build Folder (Shift-Command-K) очищает продукты сборки только текущего проекта и оставляет на месте индексы, кэши модулей и папки всех остальных проектов. Это инструмент для отладки сборки, а не для освобождения места: чтобы вернуть заметный объём, удаляйте сами папки DerivedData.

Источники

Хранилище разработчика: шаг за шагом