Guides Levo · Développeurs : Apple

Supprimer DerivedData : comment faire, et est-ce sans risque ?

Le popover de Levo avec les données de compilation Xcode cochées dans la liste Ready to free, avec leur taille et la raison

Oui, c’est sans risque. DerivedData ne contient que les résultats de compilation, les index et les journaux qu’Xcode produit à partir de votre code source : le supprimer vous coûte une compilation lente, rien de plus. Quittez d’abord Xcode, et ne le supprimez pas pendant une compilation ou un archivage.

ContenuEmplacementSi on le supprime
Produits de compilationDerivedData/<Project>-<hash>/BuildReconstruits à la prochaine compilation
Index…/Index.noindexXcode réindexe, la recherche et la complétion sont lentes un moment
Journaux…/LogsLes anciens journaux de compilation disparaissent du Report navigator
Paquets Swift…/SourcePackagesLes paquets sont retéléchargés, il faut donc une connexion
Cache des modulesDerivedData/ModuleCache.noindexReconstruit, partagé par tous les projets

Le faire vous-même

Le dossier est ~/Library/Developer/Xcode/DerivedData, avec un sous-dossier par projet, nommé d’après lui et suivi d’un hash. Choisissez la méthode qui correspond à ce que vous voulez.

  1. Un projet, depuis Xcode. Choisissez Product › Clean Build Folder (⇧⌘K). Cela efface les produits de compilation de ce projet mais conserve son index.
  2. Un projet, dans le Finder. Ouvrez Xcode › Settings › Locations, cliquez sur la petite flèche à côté de Derived Data et placez le dossier du projet dans la corbeille.
  3. Tout, dans le Terminal. Xcode fermé :
du -sh ~/Library/Developer/Xcode/DerivedData
rm -rf ~/Library/Developer/Xcode/DerivedData/*

Le dossier lui-même peut rester. S’il manque, Xcode le recrée. Pour les compilations en ligne de commande qui utilisent -derivedDataPath, supprimez plutôt ce dossier-là.

Attendez si une compilation, un archivage ou un test d’interface est en cours, ou si vous êtes dans un avion et utilisez des paquets Swift : SourcePackages part aussi et doit être retéléchargé. Pour le garder, supprimez seulement les dossiers Build et Index.noindex.

Si un projet se comporte bizarrement après coup, réinitialisez aussi les paquets avec File › Packages › Reset Package Caches. Même chose pour les caches SwiftPM et CocoaPods.

Quand le vider ne règle pas le problème

Les développeurs vident DerivedData pour débloquer une compilation, et cela marche souvent, car la cause est un cache de modules ou un index périmé. Sinon, le problème est ailleurs : un paquet résolu dans la mauvaise version, un dossier Pods périmé, ou un réglage de signature. Essayez ensuite la réinitialisation des paquets décrite dans le guide des caches de paquets.

Si le dossier revient sans cesse à 30 Go ou plus, regardez quels dossiers de projet sont les plus gros : du -sh ~/Library/Developer/Xcode/DerivedData/* | sort -h. Chaque branche ou clone d’un projet a son propre dossier, car le hash vient du chemin du projet. Dix copies de travail d’une app, ce sont dix copies.

Vous pouvez aussi déplacer DerivedData ailleurs, sur un disque externe, dans Xcode › Settings › Locations. Cela fonctionne, mais les compilations sur un disque plus lent sont nettement plus lentes. Pour la plupart des gens, le vider régulièrement reste le meilleur compromis.

Comment Levo s’en charge

Levo affiche le dossier DerivedData de chaque projet dans le groupe des données de compilation Xcode, avec sa taille et la date de la dernière compilation. Les dossiers des projets que vous n’avez pas touchés, ou dont le dossier source a disparu, sont cochés en premier par Select › Smartly ; celui que vous avez compilé ce matin reste décoché.

Tant qu’Xcode, xcodebuild ou les services de compilation tournent, Levo marque la ligne comme verrouillée et explique pourquoi. Décochez ce que vous voulez garder, puis cliquez sur Clean up. Levo pour les développeurs iOS et Mac donne la liste complète de ce qu’il recherche.

FAQ

Peut-on supprimer DerivedData sans risque ?

Oui. Le dossier contient les résultats de compilation, les index et les journaux produits à partir de votre code source. Xcode le reconstruit, donc la première compilation suivante est plus lente.

Où se trouve DerivedData sur Mac ?

Dans ~/Library/Developer/Xcode/DerivedData. Ouvrez Settings dans Xcode, puis Locations, et cliquez sur la flèche à côté de Derived Data pour l’afficher dans le Finder.

Vais-je perdre mes breakpoints ou mes schemes si je supprime DerivedData ?

Non. Ils sont enregistrés dans votre projet ou votre workspace, pas dans DerivedData. Vous perdez les anciens journaux de compilation et l’index en cache.

Pourquoi Xcode remplit-il DerivedData sans arrêt ?

Chaque compilation y écrit, un dossier par projet, plus l’index. Les gros projets et les nombreuses branches finissent par peser des dizaines de gigaoctets, il est donc normal de le vider toutes les quelques semaines.