Wie behebe ich einen PCH-Fehler?

132

Wenn ich versuche, meine App einzubauen Xcode, wird folgende Fehlermeldung angezeigt:

PCH-Datei, die aus einem anderen Zweig ((clang-425.0.24)) als der Compiler ((clang-425.0.27)) erstellt wurde

Es passiert vorher nicht, aber dies war der erste Build nach der Aktualisierung von Xcode.

Andere Apps funktionieren, aber nicht diese spezielle.

Wenn ich die "Precompile Prefix Header"Einstellung ausschalte , funktioniert es.

Wie behebe ich diesen Fehler und behalte diese Einstellung bei?

Macro206
quelle

Antworten:

246

Dies ist häufig ein Caching-Problem. Normalerweise kann das Problem behoben werden, indem Sie die Wahltaste gedrückt halten und Produkt> Build-Ordner bereinigen ...

gaige
quelle
3
Dies hat den Fehler für mich nicht behoben. Ich habe auch eine vollständige Bereinigung durchgeführt und die abgeleiteten Daten gelöscht.
Ben S
6
Arbeitete für mich, außer es war unter Product> Cleanund keine Notwendigkeit für die Befehlstaste. (Xcode 4.6.1)
Steve Haley
1
@SteveHaley Es gibt eine Product > Clean, aber es macht einen weniger gründlichen Job. Einige Leute können mit kaufen Product > Clean, für die meisten Product > Clean Build Folder...ist ausreichend, und andere müssen manuell entfernt werden, wie in der Antwort von @Sedes unten angegeben.
Gaige
7
Ich kenne die alte Frage, aber das oben erwähnte Update hat mir nicht geholfen. Nur durch Löschen abgeleiteter Daten und erneutes Erstellen des Projekts funktioniert es einwandfrei.
Ankit Jain
2
kannst du einfach rm -rf / ios / build machen?
SuperUberDuper
47

Löschen Sie den DerivedDataOrdner für das Projekt. Schauen Sie unter Xcode-Einstellungen -> Speicherorte nach, wo Sie es speichern.

wcochran
quelle
Es ist wichtig zu beachten, dass DerivedDatasich Ihr BuildOrdner nicht unbedingt dort befindet. Dies hat mir sehr geholfen, danke!
Nit
1
moduleCacheinnerhalb von DerivedDatazu löschen
whtlnv
Sie sollten zuerst versuchen, "zu reinigen", wie die anderen Antworten sagen. Wenn dies nicht funktioniert, würde ich einfach den gesamten DerivedDataOrdner rekursiv löschen ... "Nuke aus dem Orbit ... nur so, um sicher zu sein." @whitelionV das wäre auch rm moduleCacheund alles andere drin .
Wcochran
39

Es scheint, dass das Produkt> Clean Build Folder ... (mit gedrückter Wahltaste) für die meisten Menschen funktioniert. Siehe die ausgewählte Antwort von @gaige.

Wenn Sie sich von den meisten Menschen (einschließlich mir) unterscheiden und dies dennoch zu Problemen führt, hat XCode Ihre freigegebenen vorkompilierten Header wahrscheinlich an anderer Stelle belassen. Für mich befanden sie sich in einem ähnlichen Ordner:

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

Ich habe gerade den gesamten SharedPrecompiledHeaders-Ordner gelöscht und das hat die Dinge für mich gelöst. Ich würde hier allerdings nicht viel anderes anfassen ...

Sedes
quelle
2
Dies hat dieses Problem für mich behoben. Für mich liegt es daran, dass ich einen befehlszeilengesteuerten Build habe.
ThomasW
2
In diesem Fall finden Sie diesen Ordner im Xcode-Build-Transkript. Ich suchte nach der Zeichenfolge "SharedPrecompiledHeaders"
José Manuel Sánchez
6
Ja, das ist die richtige Lösung. Insbesondere, wenn Sie über die Befehlszeile erstellen oder über ein Erstellungsskript verfügen. Der vorkompilierte Header-Speicherort finden Sie in den Build-Einstellungen unter "Build-Speicherorte" -> Zwischengespeicherter Header im zwischengespeicherten Pfad.
Karim
Wie finden Sie das var-Verzeichnis?
GoldenJoe
1
@ GoldenJoe Open Finder Shift-Cmd-Gund Typ/var
Sedes
23

Gehen Sie zu Xcode-Einstellungen-> Speicherorte (wie in der Antwort von wcochran erwähnt) und benennen Sie einfach Ihren DerivedData-Ordner um. Ich habe meine einfach von "DerivedData" in "DerivedData2" geändert und das System musste nicht mehr auf den alten Speicherort verweisen. Dies hat es für mich behoben, als keine der anderen Antworten funktionierte. Siehe Bild:

Geben Sie hier die Bildbeschreibung ein

Aljoschak
quelle
15

Keine der anderen Optionen hat bei mir funktioniert, hier ist das, was es behoben hat:

Ich habe den Cache-Ordner unter gelöscht /Users/(Yourname)/Library/Developer/Xcode/DerivedData/ModuleCache/(das Umbenennen funktioniert auch).

Versuchen Sie, den im Fehler genannten Ordner zu löschen, wenn Ihr Fehler ungefähr so ​​aussieht:

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
quelle
Ja, du hast recht. Keines der oben genannten funktioniert für mich. Löschen Sie einfach den genannten Ordner und erstellen Sie ihn neu.
Zhang Buzz
Dies ist die richtige Antwort. Bereinigen / Löschen DerivedData funktioniert bei mir nicht, nachdem das Projekt auf einen anderen Pfad verschoben wurde.
Bill Chan
13

Das Löschen der Ordner Buildund DerivedDatavom Projektspeicherort im Finder hat bei mir funktioniert.

spfursich
quelle
könnte der .buildOrdner für einige Leute sein (einschließlich mir)
Florian Pfisterer
Funktioniert gut. Siehe auch stackoverflow.com/questions/33653727/…
Mr-IDE
13

Wechseln Sie in Ihrem ios-Projektverzeichnis zum Erstellen und Löschen des ModuleCache- Ordners. Führen Sie es react-native run-ioserneut aus, es sollte wie erwartet funktionieren. Zusammenfassung -rm -rf ios/build/ModuleCache

Ritik Rishu
quelle
Ja, auch auf React-Native und Build funktioniert von Xcode, aber nicht von CLI mit npm run ios. Das Entfernen des Caches wie vorgeschlagen löste das Problem.
Tag
6

Nach dem Upgrade von Xcode bekam ich dies mit mehreren Projekten. Clean Build Folder und Clean hatten keine Auswirkung - @sedes Antwort und @ josema.vitaminews Kommentar haben es für mich getan. Aber es kann schwierig sein, es sei denn, Sie verwenden ein wenig List. Hier ist eine schrittweise Verknüpfung:

  1. Wechseln Sie zu dem fehlgeschlagenen Build-Protokoll
  2. Verwenden Sie cmd-f "SharedPrecompiledHeaders", um es zu finden (es wird sich mitten in einer massiven, schrecklichen, komplexen Befehlszeile befinden).
  3. Ziehen Sie den Text "SharedPrecompiledHeaders" und alle Zeichen VOR, aber NICHT NACH, bis Sie zum Anfang dieses Pfadbits gelangen (immer noch in der Mitte des großen Textblocks), z. B. für mich: "/ var / folders / 03 /n71d4r551jv40j5nb8r9fjy80000gn/C/com.apple.Xcode.501/SharedPrecompiledHeaders
  4. Finder öffnen
  5. Menü: Gehe zu -> Gehe zum Ordner ...
  6. Kopieren Sie den ausgewählten Pfad
  7. in "SharedPrecompiledHeaders" ALLE Unterordner löschen (dies ist sicher: es werden nur zwischengespeicherte Daten)

... und jetzt werden alle Ihre Projekte "behoben", müssen sich jedoch beim ersten Mal ohne Caching neu erstellen (sodass NUR der NÄCHSTE Build langsamer als normal ist).

Adam
quelle
5

In meinem Fall habe ich alle Dateien unter SharedPrecompiledHeaders auf diese Weise entfernt und alles begann gut zu funktionieren:

sudo find /var/folders/ -type d -name "SharedPrecompiledHeaders" | xargs -n 1 -I dir sudo find dir -name \* -type f -delete
Hamid Tavakoli
quelle
Dies ist etwas, das ich leicht in einem Skript verwenden kann, also mag ich es ... Ich habe [noch] keine schlimmen Fälle entdeckt
Matt
5

Ich habe diesen Fehler beim Versuch, ein Projekt mit Swift Package Manager zu erstellen, festgestellt.

Die Lösung ist einfach das .buildVerzeichnis zu löschen .

Zigii Wong
quelle
4

Insbesondere wenn Sie über die Befehlszeile erstellen oder über ein Erstellungsskript verfügen, reicht das Bereinigen des xcode-Ziels nicht aus. Sie haben diesen Ordner gelöscht.

Die vorkompilierte Header-Position finden Sie in der

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

Löschen Sie diesen Ordner mit,

#rm -fr SharedPrecompiledHeaders

Geben Sie hier die Bildbeschreibung ein

Karim
quelle
Mein Cache-Pfad befand sich im Build-Ordner / build / ModuleCache /. Das Entfernen vom alten Standort hat den Trick nicht getan
TheJeff
3

Wenn es nicht durch Reinigung gelöst wird. Es handelt sich um ein Build-Cache-Problem. Halten Sie die Wahltaste gedrückt und navigieren Sie zu Produkt> Build-Ordner bereinigen. Das hat mein Problem behoben.

Vardhan
quelle
3

In meinem Fall hat Xcode den Ordner DerivedData in meinem Projekt-Hauptpaket erstellt (/ Users / Path_to_your_project_source_code / YourProjectName / DerivedData).

Ich habe diesen Ordner gerade aus meinem Quellcode-Bundle gelöscht und jetzt funktioniert er.

So aktivieren Sie Gehen Sie zu Xcode-Einstellungen-> Speicherorte und prüfen Sie, ob DerivedData auf "Relativ" ausgewählt ist. Siehe das Bild unten Geben Sie hier die Bildbeschreibung ein

Dilip Saket
quelle
3

Für mich würde dies immer passieren, wenn ich mein Projekt an einen anderen Ort kopiere. Ich würde das tun, um es in ein Repo oder so zu schieben.

Ich muss den Build-Ordner (rm -rf Build /) an den alten und neuen Speicherorten löschen, damit er funktioniert. Dies ist sinnvoll, da der Build-Ordner Daten enthält, die für den neuen Speicherort nicht relevant sind.

Das Bereinigen abgeleiteter Daten oder das Löschen der Ordner sharedPrecompiledHeaders hat dies in diesem Fall nicht wirklich getan.

TheJeff
quelle
2

Sie sollten "Umschalt + Befehl + C" gedrückt halten, und dann werden Sie erfolgreich bauen

Peter Zhu
quelle
2

Das Bereinigen und / oder Löschen abgeleiteter Daten hat bei mir nicht funktioniert. Was funktioniert hat, ist das Berühren / Speichern der PCH-Datei (Hinzufügen eines Zeichens und Löschen), um die Neuerstellung zu erzwingen. Das hat den Trick gemacht.

Alfie Hanssen
quelle
Das hat bei mir funktioniert. Ich habe das SharedPrecompiledHeaders-Verzeichnis, den Clean Build, den Clean Build-Ordner usw. usw. gelöscht. Dies war auf Xcode 5.1
migs647
Wo ist die PCH-Datei?
TheJeff
2

Wenn ein sauberer Build für Sie nicht funktioniert, suchen Sie nach den PCH-Dateien in /var/folders/../SharedPrecompiledHeadersund entfernen Sie die PCH-Dateien, die für mich funktioniert haben.

Jonathan Lin
quelle
2
Es gibt eine identische Antwort mit mehr Details, die oben von @sedes gepostet wurden. Bitte versuchen Sie nicht, doppelte Antworten zu posten.
michaellindahl
2

Sie können versuchen, das Produkt oder den Build-Ordner zu bereinigen:

SHIFT+ COMMAND+K

OPTION+ SHIFT+ COMMAND+K

Mateus
quelle
2

Wenn Sie eine Befehlszeilenerstellung über ausführen, prüfen Sie xcodebuild, ob die-derivedDataPath BUILD_DIR Option verwendet wird. In diesem Fall befindet sich Ihr Verzeichnis ModuleCache.noindex im BUILD_DIR anstelle des normalen Xcode-Speicherorts. Löschen Sie das Verzeichnis ModuleCache.noindex und Sie sind fertig.

Ich bin auf diese Situation gestoßen, weil ich eine React Native-App erstelle und der iOS-Client normalerweise über die Befehlszeile über das React Native-Toolset erstellt wird.

Phatmann
quelle
1

Ich habe versucht, das Projekt und den Build-Ordner zu bereinigen, was beide nicht funktionierten.

Danach habe ich xCode vollständig beendet, den abgeleiteten Datenordner an seinem Standardspeicherort gelöscht: ~ / Library / Developer / Xcode / DerivedData, xCode erneut gestartet und das Projekt erstellt.

Das schien das Problem für mich gelöst zu haben.

tcd1980
quelle
Könnten Sie bitte etwas näher darauf eingehen?
Richard Dally
Das Schließen von Xcode, das Ausführen rm -rf ~/Library/Developer/Xcode/DerivedDataim Terminal und das anschließende Öffnen von Xcode haben es für mich getan. Ich habe auch sichergestellt, dass meine Standorte (Xcode -> Einstellungen -> Standorte) alle Standard sind.
sman591
1

AKTUALISIERT

Das hat bei mir perfekt funktioniert:

  • Schließen Sie Ihr Projekt oder Ihren Arbeitsbereich.
  • Im Finder: ⇧shift + ⌘cmd + G.
  • Einfügen: ~ / Library / Developer / Xcode / DerivedData /
  • Löschen Sie den ModuleCache-Ordner und leeren Sie den Papierkorb.
  • Öffnen Sie Ihr Projekt.
  • Sauber: ⇧Umschaltung + ⌘cmd + K.
  • Build: ⌘cmd + B.

xCode 7.3.1
Referenz hier

Daniel Morandini
quelle
0

Ich habe gerade gelöscht DerivedDataund für mich gearbeitet.

KAUSHIK PARMAR
quelle