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 із робочими копіями (checkouts) залежностей, репозиторіями, результатами збірки й станом робочого простору, а SwiftPM додатково веде спільний кеш репозиторіїв, щоб проєкти не завантажували ті самі залежності щоразу. Xcode додає ще один рівень: робочі копії й продукти збірки пакетів програми зазвичай лежать у DerivedData проєкту, тож проблема, яку видно лише в Xcode, може потребувати іншого очищення, ніж збірка командою swift. Очищуйте найвужчий рівень, що пояснює проблему: після очищення одного проєкту все відновлюється швидше й частіше без мережі, а інші репозиторії не сповільнюються.

Вибирайте команду за охопленням

swift package clean видаляє артефакти збірки пакета — це перший вибір для застарілих скомпільованих файлів, дивної поведінки компонувальника чи звільнення місця в одному репозиторії. swift package reset скидає весь кеш і каталог збірки пакета, тож залежності й стан робочого простору доведеться підготувати знову; вдавайтеся до нього, якщо clean не допоміг. 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 на цьому 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-cacheswift package clean видаляє артефакти збірки пакета — це перший вибір для застарілих скомпільованих файлів, дивної поведінки компонувальника чи звільнення місця в одному репозиторії.
Зберігайте Package.resolved, якщо не оновлюєте версії навмисноPackage.swift / Package.resolvedPackage.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?

Не для звичайного очищення. Файл фіксує розвʼязані версії залежностей, і без нього наступного разу можуть бути вибрані інші. Видаляйте його, лише коли свідомо хочете розвʼязати залежності заново.

Джерела

Інші посібники зі сховища для розробників