AskClean

Xcode : Clean Build Folder ou suppression de DerivedData ?

Équipe AskClean · Mis à jour 2026-11-02

Clean Build Folder efface les produits de build du schéma ouvert. Supprimer DerivedData réinitialise un ensemble plus large : les produits de build, mais aussi les index, les caches de modules et les journaux. Pour un build cassé, commencez par Clean Build Folder ; pour un index corrompu, supprimez le dossier DerivedData de ce seul projet ; pour récupérer réellement de l’espace disque, supprimez les dossiers DerivedData des projets que vous ne compilez plus.

La différence tient à la portée, pas à la profondeur

Product > Clean Build Folder (Commande + Maj + K) agit dans le projet et le schéma actuellement ouverts. La commande supprime les produits compilés et les fichiers intermédiaires de ce contexte, pour que le build suivant reparte des sources. Sa portée se limite à un projet, et elle conserve délibérément ce qui coûte cher à reconstruire.

DerivedData est le dossier de premier niveau partagé par tous les projets qui utilisent l’emplacement par défaut — ~/Library/Developer/Xcode/DerivedData, avec un sous-dossier par projet ou espace de travail que vous avez déjà ouvert. Supprimer un sous-dossier réinitialise exactement ce projet. Supprimer tout le dossier oblige chacun de vos projets à être recompilé et réindexé à sa prochaine ouverture.

Il serait donc trompeur d’opposer un « nettoyage léger » à un « nettoyage en profondeur ». Clean Build Folder est ciblé et peu coûteux ; supprimer DerivedData a une portée large et vous coûte l’index. Le bon choix dépend uniquement de l’endroit où se situe la panne : dans les produits de build ou en dehors.

Quand un build échoue, commencez par le plus ciblé

Si l’échec est apparu juste après un changement de branche, de configuration de build ou de fichiers de ressources, arrêtez l’app en cours d’exécution et lancez d’abord Clean Build Folder. C’est la réinitialisation la moins coûteuse : elle préserve l’index et vous remet au travail en un seul build, au lieu d’un build suivi de plusieurs minutes d’indexation.

Passez à la suppression du dossier DerivedData de ce projet quand les symptômes ne relèvent pas vraiment des produits de build : Xcode signale des erreurs dans du code déjà corrigé, Jump to Definition mène au mauvais endroit, la complétion de code ne reconnaît plus vos propres types. Ce sont des symptômes d’index, et Clean Build Folder ne touche pas à l’index.

Un cas précis mérite d’être connu, car c’est généralement lui qui transforme « j’ai nettoyé et rien n’a changé » en « j’ai supprimé DerivedData et tout est rentré dans l’ordre » : le cache des modules précompilés (ModuleCache.noindex) se trouve à la racine de DerivedData, et non dans le sous-dossier d’un projet. Clean Build Folder ne l’atteint jamais. Quand ce cache devient obsolète après un changement de SDK ou de chaîne d’outils, seule sa suppression fait disparaître l’erreur.

Aucune des deux commandes ne corrige un vrai bug dans votre code ou vos dépendances. Si exactement la même erreur survit à un build propre, arrêtez de nettoyer et lisez le message du compilateur : la cause se trouve dans les réglages du projet, dans Package.resolved, dans le SDK sélectionné ou dans le code lui-même.

Ni l’une ni l’autre ne sert à nettoyer le disque

Clean Build Folder est un outil de diagnostic qui, accessoirement, libère quelques octets. Il peut rendre de l’espace pour le projet en cours, mais les produits de build de tous les autres projets, tous les index et le cache des modules restent exactement en place. L’exécuter pour récupérer de l’espace disque, c’est viser la mauvaise cible.

Si l’espace est le véritable objectif, procédez dans l’autre sens : mesurez d’abord les sous-dossiers de DerivedData, puis supprimez ceux des projets que vous n’avez pas ouverts depuis des mois. C’est généralement là que se trouvent les dizaines de gigaoctets : des clones ponctuels, compilés une fois puis jamais rouverts.

Ne commencez pas par rm -rf. Le Finder vous permet de placer les dossiers sélectionnés dans la Corbeille, où ils restent récupérables tant que vous ne la videz pas — une différence qui compte la première fois que vous supprimez le dossier d’un projet justement en cours de compilation. Le Terminal se justifie pour l’automatisation, mais seulement après avoir vérifié le chemin exact.

Vérifiez le résultat au lieu de vous fier à un chiffre

Notez la taille de DerivedData avant toute action, appliquez une seule des deux options, puis mesurez de nouveau. Après Clean Build Folder, compilez le schéma en cours. Après la suppression d’un dossier DerivedData, ouvrez Xcode et attendez la fin du premier build et de l’indexation.

Procéder dans cet ordre distingue l’espace récupéré du prix payé pour le récupérer. Il n’existe pas de chiffre universel : le résultat dépend du nombre de projets, de configurations et d’architectures compilés sur ce Mac précis.

Quelle option choisir

SituationQue faireCoût de récupération
Le build échoue sur le schéma en coursProduct > Clean Build FolderUn nouveau build de ce projet. Les index de tous les projets sont conservés.
Erreurs fantômes, Jump to Definition défaillant~/Library/Developer/Xcode/DerivedData/<project>Build complet et réindexation, pour ce seul projet.
Après un changement de SDK, les erreurs survivent à Clean Build Folder~/Library/Developer/Xcode/DerivedData/ModuleCache.noindexLes modules sont recompilés au build suivant. Clean Build Folder ne peut pas atteindre ce dossier.
Vous avez vraiment besoin d’espace disque~/Library/Developer/Xcode/DerivedDataSupprimez les gros sous-dossiers obsolètes ; ces projets seront recompilés à leur prochaine ouverture.
Anciens runtimes de simulateurXcode Settings > ComponentsUne tout autre catégorie. Aucune des deux options n’y touche.

Ce tableau décrit une portée, pas un nombre de gigaoctets promis. Mesurez votre propre Mac avant et après.

FAQ

Clean Build Folder supprime-t-il DerivedData ?

Non. La commande efface les produits de build du projet et du schéma ouverts. Elle n’équivaut pas à la suppression du dossier DerivedData partagé, qui contient aussi les index, le cache des modules et les journaux de tous vos projets.

Peut-on supprimer sans risque le dossier DerivedData d’un projet ?

Oui. Tout ce qu’il contient est dérivé de votre code source, et Xcode le régénère. Votre code et votre historique Git restent intacts. Le seul coût : le premier build suivant est un build complet, suivi d’une passe d’indexation.

Faut-il quitter Xcode avant ?

Pour supprimer DerivedData à la main, oui : cela évite que l’indexeur garde des fichiers ouverts ou les recrée pendant que vous les supprimez. Pour la commande intégrée Clean Build Folder, non : c’est Xcode lui-même qui s’en charge.

Pourquoi l’erreur persiste-t-elle après le nettoyage ?

Le plus souvent, parce que le cache n’a jamais été en cause. Vérifiez le message du compilateur, les réglages du schéma, les versions des dépendances, Package.resolved, le SDK sélectionné et ce qui a réellement changé sur votre branche actuelle.

Clean Build Folder n’a rien changé, mais supprimer DerivedData a réglé le problème. Pourquoi ?

En général à cause du cache des modules précompilés. ModuleCache.noindex se trouve à la racine de DerivedData et non dans le sous-dossier d’un projet : Clean Build Folder ne peut pas l’atteindre, alors que la suppression de DerivedData l’efface.

Sources

Poursuivre avec le stockage Xcode