Comment réparer l'erreur PCH?


132

Lorsque j'essaye de créer mon application Xcode, j'obtiens ce message d'erreur:

Fichier PCH construit à partir d'une branche différente ((clang-425.0.24)) du compilateur ((clang-425.0.27))

Cela n'arrive pas avant, mais c'était la première version après la mise à jour de Xcode.

D'autres applications fonctionnent, mais pas celle-ci en particulier.

Si je désactive le "Precompile Prefix Header"paramètre, cela fonctionne.

Comment corriger cette erreur tout en conservant ce paramètre activé?

Réponses:


246

C'est souvent un problème de mise en cache. Habituellement, il peut être résolu en maintenant la touche Option enfoncée et en choisissant Produit> Nettoyer le dossier de construction ...


3
Cela n'a pas résolu l'erreur pour moi. J'ai également effectué un nettoyage complet et la suppression des données dérivées.
Ben S

6
A fonctionné pour moi, sauf que c'était sous Product> Cleanet pas besoin de la touche de commande. (Xcode 4.6.1)
Steve Haley

1
@SteveHaley Il y a un Product > Clean, mais il fait un travail moins approfondi. Certaines personnes peuvent acheter avec Product > Clean, car la plupart Product > Clean Build Folder...sont suffisantes, et d'autres ont besoin de la suppression manuelle comme indiqué dans la réponse @Sedes ci-dessous.
gaige

7
Je connais sa vieille question, mais le correctif mentionné ci-dessus ne m'a pas aidé. Il suffit de supprimer les données dérivées et de créer à nouveau le projet.
Ankit Jain

2
pouvez-vous simplement faire rm -rf / ios / build?
SuperUberDuper

47

Supprimez le DerivedDatadossier du projet. Regardez sous les préférences Xcode -> Emplacements pour voir où vous l'enregistrez.


Il est important de noter que ce DerivedDatan'est pas forcément là où se trouve votre Builddossier, cela m'a beaucoup aidé, merci!
Nit

1
supprimer à l' moduleCacheintérieur de DerivedDatatrop
whtlnv

Vous devriez d'abord essayer de «nettoyer» comme le disent les autres réponses. Quand cela ne fonctionne pas, je supprimerais simplement récursivement tout le DerivedDatadossier ... "Nuke from orbit ... only way to be sure". @whitelionV ce serait également rm moduleCacheet tout le reste.
wcochran

39

Il semble que le Product> Clean Build Folder ... (avec la touche Option enfoncée) fonctionne pour la plupart des gens. Voir la réponse sélectionnée par @gaige.

Si vous n'êtes pas comme la plupart des gens (moi y compris) et que cela vous pose toujours des problèmes, XCode a probablement laissé vos en-têtes précompilés partagés ailleurs. Pour moi, ils étaient dans un dossier similaire à celui-ci:

/var/folders/<some random two characters>/<some random string>/C/com.apple.Xcode.502/SharedPrecompiledHeaders

Je viens de supprimer tout le dossier SharedPrecompiledHeaders et cela a résolu les choses pour moi. Je n'irais pas toucher grand-chose d'autre ici cependant ...


2
Cela a résolu ce problème pour moi. Pour moi, c'est parce que j'ai une version pilotée par la ligne de commande.
ThomasW

2
Si tel est votre cas, vous pouvez trouver ce dossier dans la transcription de compilation Xcode. J'ai cherché la chaîne "SharedPrecompiledHeaders"
José Manuel Sánchez

6
Oui, c'est la bonne solution. Surtout si vous construisez à partir de la ligne de commande ou si vous avez un script de construction. L'emplacement de l'en-tête précompilé peut être trouvé dans les paramètres de construction, "Emplacements de construction" -> Chemin de mise en cache des en-têtes précompilés.
karim

Comment trouvez-vous le répertoire var?
GoldenJoe

1
@GoldenJoe Ouvrez Finder Shift-Cmd-Get tapez/var
Sedes

23

Allez dans Préférences Xcode-> Emplacements (comme mentionné dans la réponse de wcochran) et renommez simplement votre dossier DerivedData. J'ai simplement changé le mien de "DerivedData" à "DerivedData2" et cela a forcé le système à arrêter de référencer l'ancien emplacement. Cela a résolu le problème pour moi lorsqu'aucune des autres réponses n'a fonctionné. Voir la photo:

entrez la description de l'image ici


15

Aucune des autres options n'a fonctionné pour moi, voici ce qui l'a corrigé:

J'ai supprimé le dossier de cache à /Users/(Yourname)/Library/Developer/Xcode/DerivedData/ModuleCache/ (le renommer fonctionne aussi).

Essayez de supprimer le dossier mentionné dans l'erreur, si votre erreur ressemble à ceci:

PCH was compiled with module cache path '/Users/User/Library/Developer/Xcode/DerivedData/ModuleCache/75YIWZVTEAO8', but the path is currently '/Users/Stan/Library/Developer/Xcode/DerivedData/ModuleCache/75YIWZVTEAO8


Oui, tu as raison. Aucune de ces réponses ne fonctionne pour moi. Supprimez simplement le dossier mentionné et reconstruisez-le.
Zhang Buzz

C'est la bonne réponse. Nettoyer / supprimer DerivedData ne fonctionne pas pour moi après avoir déplacé le projet vers un autre chemin.
Bill Chan


13

Dans votre répertoire de projet ios, accédez à créer et supprimer le dossier ModuleCache . Exécutez à react-native run-iosnouveau, cela devrait fonctionner comme prévu. Résumé -rm -rf ios/build/ModuleCache


Oui, également sur react-native et build fonctionne à partir de Xcode mais pas de CLI en utilisant npm run ios. La suppression du cache comme suggéré a résolu le problème.
dakt

6

Après la mise à niveau de Xcode, j'obtenais cela avec plusieurs projets. Clean Build Folder et Clean n'ont eu aucun effet - la réponse @sedes et le commentaire de @ josema.vitaminew l'ont fait pour moi. Mais cela peut être délicat à moins d'utiliser un peu de ruse, alors voici un raccourci étape par étape:

  1. aller au journal de construction qui a échoué
  2. utilisez cmd-f "SharedPrecompiledHeaders" pour le trouver (ce sera au milieu d'une ligne de commande complexe horrible et massive)
  3. faites glisser et sélectionnez le texte "SharedPrecompiledHeaders" et tous les caractères AVANT mais PAS APRÈS jusqu'à ce que vous arriviez au début de ce bit de chemin (toujours au milieu du gros bloc de texte) par exemple pour moi: "/ var / dossiers / 03 /n71d4r551jv40j5nb8r9fjy80000gn/C/com.apple.Xcode.501/SharedPrecompiledHeaders
  4. ouvrir le Finder
  5. menu: Aller -> Aller au dossier ...
  6. copier / coller le chemin sélectionné
  7. dans "SharedPrecompiledHeaders", supprimez TOUS les sous-dossiers (c'est sûr: ce ne sont que des données en cache)

... et maintenant tous vos projets seront "Fixés", mais devront se reconstruire la première fois sans aucune mise en cache (donc la construction NEXT ONLY sera plus lente que la normale).


5

dans mon cas, je me suis débarrassé de tous les fichiers sous SharedPrecompiledHeaders de cette façon et tout a commencé à fonctionner correctement :

sudo find /var/folders/ -type d -name "SharedPrecompiledHeaders" | xargs -n 1 -I dir sudo find dir -name \* -type f -delete

C'est quelque chose que je peux facilement utiliser dans un script, donc je l'aime ... Je n'ai pas encore découvert de mauvais cas
Matt

5

J'ai rencontré cette erreur en essayant de créer un projet avec Swift Package Manager.

La solution est simplement de supprimer le .buildrépertoire.


4

Surtout si vous construisez à partir de la ligne de commande ou si vous avez un script de construction, le nettoyage de la cible xcode ne suffit pas. Vous avez supprimé ce dossier.

L'emplacement de l'en-tête précompilé se trouve dans le

Target -> build settings => "Build locations" -> Precompiled headers cached path

Supprimer ce dossier avec,

#rm -fr SharedPrecompiledHeaders

entrez la description de l'image ici


Mon chemin de cache se trouvait dans le dossier de construction / build / ModuleCache /. Le retirer de l'ancien emplacement n'a pas fait l'affaire
TheJeff

3

Si ce n'est pas résolu par le nettoyage. C'est un problème de cache de build - maintenez la touche Option enfoncée et accédez à Product> Clean Build Folder. Cela a résolu mon problème.


3

Dans mon cas, Xcode créait le dossier DerivedData dans le bundle principal de mon projet (/ Users / Path_to_your_project_source_code / YourProjectName / DerivedData)

Je viens de supprimer ce dossier de mon paquet de code source et maintenant il fonctionne.

Pour vérifier Allez dans Xcode Preferences-> Locations et voyez si DerivedData est sélectionné sur "Relative". Voir l'image ci-dessous entrez la description de l'image ici


3

Pour moi, cela se produirait toujours lorsque je copiais mon projet vers un autre emplacement. Je ferais cela pour le pousser dans un repo ou quelque chose comme ça.

Je dois supprimer le dossier Build (rm -rf Build /) dans l'ancien et le nouvel emplacement pour le faire fonctionner. Cela a du sens car le dossier Build contiendra des données qui ne sont pas pertinentes pour le nouvel emplacement.

Le nettoyage des données dérivées ou la suppression des dossiers sharedPrecompiledHeaders ne l'ont pas vraiment fait dans ce cas.


2

vous devez maintenir "shift + commande + C", et vous réussirez à construire


2

Le nettoyage et / ou la suppression des données dérivées n'a pas fonctionné pour moi. Ce qui a fonctionné, c'est de toucher / enregistrer le fichier .pch (ajouter un caractère, puis le supprimer) pour le forcer à être reconstruit. Cela a fait l'affaire.


Cela a fonctionné pour moi. J'ai supprimé le répertoire SharedPrecompiledHeaders, la compilation propre, le dossier de construction propre, etc. C'était sur Xcode 5.1
migs647

Où est le fichier PCH?
TheJeff

2

Si faire une nouvelle version ne fonctionne pas pour vous, recherchez les fichiers PCH /var/folders/../SharedPrecompiledHeaderset supprimez les fichiers PCH, ce qui a fonctionné pour moi.


2
Il y a une réponse identique à celle-ci avec plus de détails ci-dessus publiée par @sedes. Veuillez essayer de ne pas publier de réponses en double.
michaellindahl

2

Vous pouvez essayer de nettoyer le produit ou le dossier de construction:

SHIFT+ COMMAND+K

OPTION+ SHIFT+ COMMAND+K


2

Si vous effectuez une construction en ligne de commande via xcodebuild, voyez si le-derivedDataPath BUILD_DIR option est utilisée. Si tel est le cas, votre répertoire ModuleCache.noindex sera dans le BUILD_DIR au lieu de l'emplacement Xcode normal. Supprimez le répertoire ModuleCache.noindex et vous serez tous ensemble.

J'ai rencontré cette situation parce que je construis une application React Native et que le client iOS est généralement construit à partir de la ligne de commande via l'ensemble d'outils React Native.


1

J'ai essayé de nettoyer le projet et de nettoyer le dossier de construction qui ne fonctionnaient pas tous les deux.

Après cela, j'ai complètement quitté xCode, supprimé le dossier de données dérivées à son emplacement standard: ~ / Library / Developer / Xcode / DerivedData, redémarré xCode et créé le projet.

Cela semblait avoir résolu le problème pour moi.


Pourriez-vous élaborer un peu s'il vous plaît?
Richard Dally

La fermeture de Xcode, l'exécution rm -rf ~/Library/Developer/Xcode/DerivedDatadans Terminal, puis l'ouverture de Xcode l'ont fait pour moi. Je me suis également assuré que mes emplacements (Xcode -> Préférences -> Emplacements) étaient tous par défaut.
sman591

1

ACTUALISÉ

Cela a parfaitement fonctionné pour moi:

  • Fermez votre projet ou votre espace de travail.
  • Dans le Finder: ⇧shift + ⌘cmd + G
  • Coller: ~ / Library / Developer / Xcode / DerivedData /
  • Supprimez le dossier ModuleCache et videz la corbeille.
  • Ouvrez votre projet.
  • Nettoyer: ⇧shift + ⌘cmd + K
  • Construire: ⌘cmd + B


Référence xCode 7.3.1 ici


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.