AskCleanAskClean

Vider le cache de Swift Package Manager sans risque

Équipe AskClean · Mis à jour 2026-07-31

Utilisez swift package clean pour les artefacts de compilation d’un projet, reset pour réinitialiser entièrement l’espace de travail local du paquet, et swift package purge-cache uniquement pour le cache partagé des dépôts. Conservez Package.swift et Package.resolved : ils décrivent les dépendances et ne sont pas du cache jetable.

Graphe isométrique de dépendances séparant les paquets Swift actifs des couches de cache dupliquées
Choisissez le nettoyage SwiftPM le plus ciblé : artefacts du projet d’abord, téléchargements partagés seulement s’ils sont en cause.

SwiftPM possède plusieurs niveaux de cache

Un paquet compilé en ligne de commande conserve normalement checkouts, dépôts, produits de compilation et état de l’espace de travail dans .build. SwiftPM maintient aussi un cache partagé de dépôts afin que plusieurs projets ne téléchargent pas les mêmes dépendances à chaque fois.

Xcode ajoute sa propre couche. Les checkouts et produits des paquets utilisés par une app sont souvent associés au DerivedData du projet. Un problème visible seulement dans Xcode ne demande donc pas nécessairement le même nettoyage que le paquet compilé avec la commande swift.

Commencez toujours par le niveau le plus étroit qui explique le symptôme. Effacer tous les caches globaux après un seul échec ralentit les autres dépôts, augmente la dépendance au réseau et complique le diagnostic.

Choisir la bonne commande SwiftPM

swift package clean supprime les artefacts de compilation du paquet courant. C’est le premier choix pour une sortie compilée obsolète, un comportement d’édition de liens incohérent ou un gain d’espace limité à un dépôt.

swift package reset réinitialise le cache complet et le répertoire de compilation de ce paquet. Il est plus large que clean et oblige SwiftPM à préparer de nouveau l’état local. Utilisez-le si clean n’a pas corrigé un espace de travail corrompu ou incohérent.

swift package purge-cache vide le cache global des dépôts SwiftPM. Plusieurs projets peuvent ensuite devoir retélécharger leurs dépendances. Réservez-le à un cache partagé réellement endommagé ou anormalement volumineux, pas à l’entretien courant.

  1. Validez ou mettez de côté vos changements, puis vérifiez la présence de Package.swift et Package.resolved.
  2. Depuis la racine du paquet, exécutez swift package clean et retentez la compilation.
  3. Si l’état local reste incohérent, exécutez swift package reset, puis résolvez et compilez de nouveau.
  4. N’exécutez swift package purge-cache que si le cache partagé est bien la cause mesurée.
  5. Vérifiez le graphe des dépendances et les tests avant de nettoyer un DerivedData propre à Xcode.

Les sous-commandes disponibles dépendent de la chaîne d’outils Swift installée. Exécutez swift package --help sur ce Mac avant d’utiliser une commande.

Conserver Package.resolved sauf mise à jour volontaire

Package.resolved enregistre la résolution des dépendances ; ce n’est pas un cache de téléchargement. Pour une application, le versionner aide les développeurs et la CI à utiliser les mêmes versions. Le supprimer peut autoriser une prochaine résolution à choisir d’autres versions permises par Package.swift.

Une nouvelle résolution peut être utile si c’est précisément votre expérience de diagnostic. Pour un simple gain d’espace ou une recompilation, gardez Package.resolved afin que le nettoyage ne devienne pas silencieusement une mise à jour de dépendances.

Package.swift est du code source. Ne le supprimez ni ne le modifiez pour nettoyer un cache. Conservez également Sources, Tests, les plugins et les dépendances par chemin local ; seul le contenu généré peut être recréé sans perte.

Nettoyer les paquets utilisés par Xcode

Pour une dépendance d’un projet Xcode, commencez par File > Packages > Reset Package Caches si votre version de Xcode propose cette commande, puis File > Packages > Resolve Package Versions. Les noms de menus peuvent varier selon les versions.

Si le problème concerne les produits compilés de ce seul projet, supprimez uniquement son dossier DerivedData via Xcode Settings > Locations ou le Finder. La première compilation reconstruira et réindexera l’app et ses paquets.

Évitez de vider toute la racine DerivedData lorsqu’un seul projet est touché. Avec plusieurs Xcode installés, lancez la version voulue avant de résoudre les paquets afin d’utiliser la bonne chaîne d’outils et le bon support de plateforme.

Diagnostiquer avant de nettoyer

Pour l’espace disque, mesurez les dossiers .build et le cache partagé au lieu de deviner. Les clones abandonnés et leurs sorties générées sont souvent de meilleurs candidats qu’un cache global encore utile aux projets actifs.

Pour un échec de compilation, notez d’abord l’erreur originale. Authentification, hôte Git indisponible, manifeste invalide, version d’outils incompatible ou checksum modifié ne sont pas réparés par la suppression des téléchargements.

Après le nettoyage, comparez swift package show-dependencies ou le graphe Xcode à la résolution attendue, puis exécutez les tests pertinents. Un paquet peut se télécharger correctement tout en restant incompatible avec la cible ou la chaîne d’outils.

Politique d’entretien pour les équipes et la CI

Sur un Mac de développement, supprimez la sortie locale d’un dépôt devenu inactif et conservez le cache partagé tant qu’il évite des téléchargements. Les runners persistants de CI ont plutôt besoin d’une limite de taille et d’une clé qui inclut la chaîne Swift et l’état de résolution.

Ne faites pas de purge-cache un rituel avant chaque build. Cela détruit la réutilisation et rend les limites de débit ou les pannes amont plus coûteuses. Déclenchez-le après mesure d’une croissance anormale ou diagnostic d’une corruption.

Dans les notes d’incident, indiquez la commande et sa portée. « Cache SwiftPM vidé » ne distingue pas clean dans un dépôt d’une purge globale, alors que leurs impacts sont très différents.

Utiliser AskClean pour le stockage développeur voisin

AskClean peut inventorier DerivedData par projet, artefacts de dépôts, caches npm déclarés, stockage des Simulators et gros dossiers inconnus. Il indique si un élément est régénérable et demande votre accord avant toute suppression.

Pour SwiftPM, les commandes officielles restent la référence de portée. AskClean aide à repérer la catégorie qui occupe l’espace ; il ne transforme pas une opération précise du gestionnaire de paquets en suppression massive inexpliquée.

Portée des commandes SwiftPM

Choisissez selon la portée et le coût de récupération, pas selon l’agressivité de la commande.

ActionPortéeConséquence attendue
swift package cleanArtefacts de compilation du paquet courantLe paquet sera recompilé au prochain build.
swift package resetCache et répertoire de compilation du paquet courantL’état local du paquet doit être préparé de nouveau.
swift package purge-cacheCache global des dépôts SwiftPMPlusieurs projets peuvent retélécharger leurs dépendances.
Supprimer Package.resolvedÉtat de résolutionLa prochaine résolution peut choisir d’autres versions ; ce n’est pas un nettoyage de cache.

FAQ

Que supprime swift package clean ?

Les artefacts de compilation du paquet courant. Il ne supprime pas Package.swift et ne met pas volontairement à jour les versions. La prochaine compilation recrée la sortie.

Quelle différence entre reset et purge-cache ?

reset cible le cache complet et le répertoire de compilation du paquet courant ; purge-cache cible le cache global des dépôts partagé entre projets.

Faut-il supprimer Package.resolved ?

Pas pour un nettoyage ordinaire. Il fixe les versions résolues ; sa suppression peut changer la prochaine sélection. Ne le retirez que si une nouvelle résolution est votre objectif explicite.

Pourquoi de l’espace reste-t-il occupé après clean ?

Il peut s’agir de checkouts, du cache partagé ou de DerivedData géré par Xcode. Mesurez chaque portée avant de choisir reset, purge-cache ou un nettoyage ciblé de DerivedData.

Sources

Autres nettoyages du stockage développeur