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é?

Macro206
la source

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 ...

gaige
la source
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.

wcochran
la source
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 ...

Sedes
la source
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

Aliochak
la source
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

Stan Tatarnykov
la source
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

La suppression des dossiers Buildet DerivedDatade l'emplacement du projet dans le Finder a fonctionné pour moi.

Spfursich
la source
pourrait être le .builddossier pour certaines personnes (y compris moi)
Florian Pfisterer
Fonctionne très bien. Voir aussi stackoverflow.com/questions/33653727/…
Mr-IDE
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

Ritik Rishu
la source
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).

Adam
la source
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
Hamid Tavakoli
la source
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.

Zigii Wong
la source
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

Karim
la source
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.

Vardhan
la source
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

Dilip Saket
la source
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.

TheJeff
la source
2

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

Peter Zhu
la source
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.

Alfie Hanssen
la source
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.

Jonathan Lin
la source
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

Mateus
la source
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.

Phatmann
la source
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.

tcd1980
la source
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

Daniel Morandini
la source
0

Je viens de supprimer DerivedDataet de travailler pour moi.

KAUSHIK PARMAR
la source