Руководство по месту для разработчиков

Xcode занимает всё моё место

От двадцати до шестидесяти гигабайт на рабочем Mac, разбросанных по шести папкам, ни одну из которых Xcode сам никогда не чистит. Вот каждая из них: для чего нужна и можно ли её удалить.

14 дней бесплатно, карта не нужна. Затем $15 один раз за 3 компьютера.

Bytesweep перечисляет папки Xcode DerivedData и поддержки устройств по размеру

Сначала измерьте

Одна команда покажет, как общий объём распределяется по папкам Xcode, чтобы вы знали, за какую браться:

du -sh ~/Library/Developer/Xcode/* ~/Library/Developer/CoreSimulator 2>/dev/null | sort -h

Шесть папок

DerivedData — обычно самая крупная · безопасно удалять

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

~/Library/Developer/Xcode/DerivedData

Удаление стоит вам одной медленной пересборки и больше ничего. Это ещё и стандартное лекарство от странного поведения Xcode, поэтому путь наизусть знает каждый iOS-разработчик.

iOS DeviceSupport — крупная · безопасно удалять

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

~/Library/Developer/Xcode/iOS DeviceSupport

Xcode скопирует их заново, когда вы в следующий раз подключите устройство с этой версией iOS: первое подключение будет медленным, других издержек нет.

Устройства CoreSimulator — крупные · в основном безопасно

У каждого симулируемого устройства своя файловая система, и они никогда не освобождаются. Используйте собственную команду Xcode, а не удаление папок, чтобы его база оставалась целостной:

xcrun simctl delete unavailable

Чтобы пойти дальше, xcrun simctl delete all удаляет все устройства симулятора. Сами среды выполнения симулятора управляются в Xcode → Настройки → Компоненты.

Архивы — небольшие, но незаменимые · сохраните

Каждая сборка, которую вы когда-либо выпускали, вместе с отладочными символами dSYM.

~/Library/Developer/Xcode/Archives

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

И снова после следующего выпуска iOS

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

Кэш Swift Package Manager — безопасно удалять

Клонированные репозитории зависимостей, которые скачиваются заново по мере надобности.

~/Library/Caches/org.swift.swiftpm

Старые среды симулятора и старые версии Xcode — безопасно при внимательности

Предыдущий Xcode.app сам по себе занимает 15 ГБ, а его среды — ещё несколько. Оставьте ту версию, которая нужна для старого проекта; остальные удалите через Finder, а затем уберите связанные среды в «Настройки → Компоненты».

Две привычки, которые держат объём в узде

Удаляйте DerivedData по проектам, а не целиком

Каждая вложенная папка названа по проекту. Очистка всей папки заставит пересобрать всё, над чем вы работаете сейчас; очистка папок проектов, законченных в прошлом году, не стоит ничего.

Проверяйте DeviceSupport после каждого выпуска iOS

Она растёт на папку с каждой сборкой iOS по всем подключаемым устройствам, поэтому незаметно набирает объём весь год. Две минуты каждый сентябрь не дадут ей превратиться в 30 ГБ.

Найдите все шесть сразу

Bytesweep распознаёт каждую папку Xcode по имени, показывает её размер и помечает архивы как требующие проверки, а не как безопасные для удаления. Всё очищенное попадает в точку восстановления, поэтому отмена — один клик в течение семи дней.

Похожее: Docker disk space · полный список для Mac

Вопросы

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

Да. Она целиком выводится из вашего исходного кода — на это и намекает название. Единственная плата в том, что следующая сборка каждого затронутого проекта будет полной.

Сломает ли удаление DeviceSupport отладку на телефоне?

Нет. Xcode скопирует символы заново при следующем подключении устройства с этой версией iOS. Первое подключение после этого займёт на несколько минут больше.

Можно ли удалять архивы Xcode?

Можно, но сначала подумайте. В архивах лежат файлы dSYM для выпущенных сборок, и без них отчёты о сбоях этих версий расшифровать не получится. Сохраните всё, что ещё у пользователей; старые бета-версии удаляйте спокойно.

Почему сам Xcode.app такой большой?

Около 15 ГБ, потому что он поставляется с наборами инструментов, SDK и средами симуляторов для всех платформ Apple. Неиспользуемые среды симуляторов можно удалить в «Xcode → Настройки → Компоненты», но сам пакет программы такой, какой есть.

Чистит ли Xcode что-нибудь из этого автоматически?

Нет. Ни у одной из этих папок нет ни ограничения по размеру, ни срока хранения. Собственно, поэтому эта страница и существует.