Як безпечно очистити кеш Swift Package Manager (SPM)
Команда AskClean · Оновлено 2026-11-02
Для артефактів збірки одного проєкту використовуйте swift package clean, для повного скидання кешу й каталогу збірки цього пакета — swift package reset, а для спільного кешу репозиторіїв SwiftPM — swift package purge-cache. Package.swift і Package.resolved не видаляйте: вони визначають залежності й не є кешем.

У SwiftPM кілька рівнів кешу
Пакет командного рядка зазвичай має каталог .build із робочими копіями (checkouts) залежностей, репозиторіями, результатами збірки й станом робочого простору, а SwiftPM додатково веде спільний кеш репозиторіїв, щоб проєкти не завантажували ті самі залежності щоразу. Xcode додає ще один рівень: робочі копії й продукти збірки пакетів програми зазвичай лежать у DerivedData проєкту, тож проблема, яку видно лише в Xcode, може потребувати іншого очищення, ніж збірка командою swift. Очищуйте найвужчий рівень, що пояснює проблему: після очищення одного проєкту все відновлюється швидше й частіше без мережі, а інші репозиторії не сповільнюються.
Вибирайте команду за охопленням
swift package clean видаляє артефакти збірки пакета — це перший вибір для застарілих скомпільованих файлів, дивної поведінки компонувальника чи звільнення місця в одному репозиторії. swift package reset скидає весь кеш і каталог збірки пакета, тож залежності й стан робочого простору доведеться підготувати знову; вдавайтеся до нього, якщо clean не допоміг. swift package purge-cache очищує глобальний кеш репозиторіїв SwiftPM, спільний для всіх проєктів, тому наступне розвʼязання залежностей чи збірка можуть потребувати мережі й забрати більше часу в багатьох репозиторіях.
- Закомітьте або відкладіть (stash) зміни й переконайтеся, що Package.swift і Package.resolved на місці.
- У корені пакета виконайте swift package clean і повторіть збірку, що не вдавалася.
- Якщо локальний робочий простір пакета й далі неузгоджений, виконайте swift package reset, а потім знову розвʼяжіть залежності й зберіть пакет.
- Запускайте swift package purge-cache, лише коли спільний кеш репозиторіїв справді завеликий або пошкоджений.
- Перевірте граф залежностей і збірку, перш ніж чистити DerivedData в Xcode.
Доступні підкоманди залежать від установленого інструментарію Swift — перевірте їх командою swift package --help на цьому Mac.
Зберігайте Package.resolved, якщо не оновлюєте версії навмисно
Package.resolved — це стан розвʼязання залежностей, а не одноразовий кеш: для програм його варто тримати в системі контролю версій, щоб команда й CI отримували ті самі версії. Якщо його видалити, наступне розвʼязання може вибрати інші версії, дозволені Package.swift, і очищення непомітно перетвориться на оновлення залежностей. Package.swift, Sources, Tests, плагіни й локальні залежності — авторські файли: згенерований вміст .build повернеться, а вони — ні.
Пакети в Xcode очищуйте окремо
Для пакетів у проєкті Xcode почніть із File > Packages > Reset Package Caches (якщо ваша версія Xcode має цю команду), а потім виконайте File > Packages > Resolve Package Versions. Якщо проблема в скомпільованих артефактах, видаліть лише DerivedData цього проєкту, а не весь корінь DerivedData. Коли бракує місця, спершу виміряйте папки .build і спільний кеш; коли не вдається збірка, збережіть початкове повідомлення: збоїв автентифікації, недоступних Git-хостів чи несумісних версій інструментів видалення кешу не виправить. AskClean допомагає знайти, які сусідні категорії сховища розробника займають місце, але охоплення кешу SwiftPM визначають офіційні команди Swift.
Підсумок рішень і ризиків
Як безпечно очистити кеш Swift Package Manager (SPM): коли потрібні swift package clean, reset чи purge-cache і як зберегти Package.resolved.
| Тема | Де або чим перевірити | Що врахувати |
|---|---|---|
| У SwiftPM кілька рівнів кешу | .build / DerivedData / кеш репозиторіїв | Пакет командного рядка зазвичай має каталог .build із робочими копіями (checkouts) залежностей, репозиторіями, результатами збірки й станом робочого простору, а SwiftPM додатково веде спільний кеш репозиторіїв, щоб проєкти не завантажували ті самі залежності щоразу. |
| Вибирайте команду за охопленням | swift package clean / reset / purge-cache | swift package clean видаляє артефакти збірки пакета — це перший вибір для застарілих скомпільованих файлів, дивної поведінки компонувальника чи звільнення місця в одному репозиторії. |
| Зберігайте Package.resolved, якщо не оновлюєте версії навмисно | Package.swift / Package.resolved | Package.resolved — це стан розвʼязання залежностей, а не одноразовий кеш: для програм його варто тримати в системі контролю версій, щоб команда й CI отримували ті самі версії. |
| Пакети в Xcode очищуйте окремо | File > Packages / DerivedData | Для пакетів у проєкті Xcode почніть із File > Packages > Reset Package Caches (якщо ваша версія Xcode має цю команду), а потім виконайте File > Packages > Resolve Package Versions. |
Часті запитання
Що видаляє swift package clean?
Артефакти збірки поточного пакета. Package.swift команда не видаляє й вимог до залежностей не змінює; наступна збірка знову створить згенеровані файли.
Чим відрізняються reset і purge-cache?
reset діє на весь кеш і каталог збірки поточного пакета, а purge-cache — на спільний глобальний кеш репозиторіїв SwiftPM. Очищення глобального кешу ширше впливає на майбутні завантаження залежностей у всіх проєктах.
Чи треба видаляти Package.resolved?
Не для звичайного очищення. Файл фіксує розвʼязані версії залежностей, і без нього наступного разу можуть бути вибрані інші. Видаляйте його, лише коли свідомо хочете розвʼязати залежності заново.
Джерела