AskClean

Как безопасно очистить кэш Swift Package Manager (SPM)

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

Для артефактов сборки одного проекта используйте swift package clean, для полного сброса кэша и каталога сборки этого пакета — swift package reset, а для общего кэша репозиториев SwiftPM — swift package purge-cache. Package.swift и Package.resolved сохраняйте: они описывают зависимости, и удалять их как кэш нельзя.

Граф зависимостей с активными пакетами Swift, отделёнными от дублирующихся слоёв кэша
Выбирайте самую узкую очистку SwiftPM: сначала артефакты сборки проекта, а общие загрузки — только если проблема в них.

У SwiftPM не один кэш

Пакет, который собирают из командной строки, хранит в папке .build рабочие копии зависимостей, репозитории, результаты сборки и состояние рабочего пространства. Кроме того, SwiftPM ведёт общий кэш репозиториев, чтобы разные проекты не скачивали одинаковые зависимости заново. Xcode добавляет ещё один уровень: рабочие копии и продукты пакетов обычно хранятся в DerivedData проекта. Очищайте самый узкий уровень, который объясняет проблему, а не стирайте все глобальные кэши после одной неудачной сборки.

Выбирайте команду по области действия

swift package clean удаляет артефакты сборки пакета — это первый выбор при устаревших результатах компиляции, странном поведении компоновщика или когда нужно освободить место в пределах одного репозитория. swift package reset сбрасывает весь кэш и каталог сборки пакета, поэтому зависимости и рабочее пространство придётся подготовить заново. swift package purge-cache очищает глобальный кэш репозиториев SwiftPM, общий для всех проектов: следующему разрешению зависимостей понадобятся сеть и время, так что применяйте его для раздутого или повреждённого кэша, а не для регулярной уборки.

  1. Закоммитьте или отложите (stash) изменения и убедитесь, что Package.swift и Package.resolved на своих местах.
  2. В корне пакета выполните swift package clean и повторите исходную сборку.
  3. Если рабочее пространство пакета по-прежнему в несогласованном состоянии, выполните swift package reset, затем снова разрешите зависимости и соберите пакет.
  4. Запускайте swift package purge-cache, только если общий кэш репозиториев раздут или повреждён.
  5. Проверьте граф зависимостей и сборку, прежде чем трогать DerivedData проекта в Xcode.

Набор подкоманд зависит от установленной версии Swift: проверьте его командой swift package --help.

Сохраняйте Package.resolved, если не обновляете версии

Package.resolved — это зафиксированный результат разрешения зависимостей, а не одноразовый кэш загрузок. Если удалить файл, при следующем разрешении SwiftPM может выбрать другие версии, допустимые по Package.swift, и очистка незаметно превратится в обновление зависимостей. Package.swift, Sources, Tests, плагины и локальные зависимости — это исходники: сгенерированное содержимое .build вернётся, а написанные вами файлы — нет.

Пакеты в Xcode очищайте отдельно

Если проблема видна только в Xcode, выполните File > Packages > Reset Package Caches, а затем File > Packages > Resolve Package Versions (названия пунктов зависят от версии Xcode). Если дело в скомпилированных артефактах пакетов, удалите DerivedData только этого проекта: первая сборка затем перекомпилирует и переиндексирует его. Прежде чем чистить глобальный кэш, измерьте папки .build: результаты сборки в заброшенных клонах обычно лучше подходят для удаления, чем кэш, который ещё ускоряет текущую работу. AskClean подскажет, какая категория вокруг SwiftPM занимает место, но область очистки самого SwiftPM задают официальные команды Swift.

Сводка решений и рисков

Как безопасно очистить кэш Swift Package Manager (SPM): когда нужны swift package clean, reset и purge-cache и как сохранить Package.resolved.

ТемаГде проверитьЧто важно
У SwiftPM не один кэш.build / DerivedData / кэш репозиториевПакет, который собирают из командной строки, хранит в папке .build рабочие копии зависимостей, репозитории, результаты сборки и состояние рабочего пространства.
Выбирайте команду по области действияswift package clean / reset / purge-cacheswift package clean удаляет артефакты сборки пакета — это первый выбор при устаревших результатах компиляции, странном поведении компоновщика или когда нужно освободить место в пределах одного репозитория.
Сохраняйте Package.resolved, если не обновляете версииPackage.swift / Package.resolvedPackage.resolved — это зафиксированный результат разрешения зависимостей, а не одноразовый кэш загрузок.
Пакеты в Xcode очищайте отдельноFile > Packages / DerivedDataЕсли проблема видна только в Xcode, выполните File > Packages > Reset Package Caches, а затем File > Packages > Resolve Package Versions (названия пунктов зависят от версии Xcode).

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

Что удаляет swift package clean?

Артефакты сборки текущего пакета. Package.swift команда не трогает и требования к зависимостям не меняет; следующая сборка создаст удалённое заново.

Чем reset отличается от purge-cache?

reset сбрасывает весь кэш и каталог сборки текущего пакета, а purge-cache очищает общий глобальный кэш репозиториев SwiftPM и поэтому влияет на будущие загрузки зависимостей во всех проектах.

Нужно ли удалять Package.resolved?

Для обычной очистки — нет: файл фиксирует выбранные версии зависимостей, и без него в следующий раз могут быть выбраны другие. Удаляйте его, только если намеренно хотите разрешить зависимости заново.

Источники

Другие руководства по очистке Mac разработчика