wake-up-neo.com

Kompilieren, Erstellen oder Archivieren von Problemen mit Xcode 4 (und Abhängigkeiten)

Diese Frage hat sich in den letzten Wochen entwickelt, um allgemeinere Probleme mit xcode4 (und dem Aktualisieren von Projekten älterer Versionen xcode s) zu behandeln.

Viele der Probleme können jedoch mit denselben Anweisungen gelöst werden.

Wenn Sie eines der folgenden Probleme haben, versuchen Sie die Methoden in der akzeptierten Antwort:

  • Xcode 4 kann eine App nicht archivieren
  • Xcode 4 erstellt ein unbrauchbares Archiv
  • Xcode 4 erstellt kein .ipa
  • Xcode 4 kann aufgrund von Präprozessorfehlern nicht kompiliert werden
  • Xcode 4 kann keine Header finden
  • Der Code von Xcode 4 funktioniert nicht
  • Projektabhängigkeiten werden nicht kompiliert
  • Das Hinzufügen einer Abhängigkeit führt zu einem der oben genannten Probleme

Ursprüngliche Frage

Titel: "lexikalische oder Präprozessor-Problemdatei nicht gefunden" in Xcode 4

Ich habe ein Projekt in Xcode 4, das einwandfrei erstellt und auf dem Gerät und dem Simulator ausgeführt werden kann, aber wenn ich versuche, es zu archivieren, treten Fehler auf, wenn ich nach Header-Dateien suche, die mit einer statischen Bibliothek verknüpft sind:

In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15:
In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23:
In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11:
In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10:
/Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1]
 #import "Merchant.h"
         ^
1 error generated. 

Xcode gibt den Fehler aus

lexical or preprocessor issue file not found 

Viel Googeln hat gezeigt, dass viele Leute dieses Problem haben, aber keine Lösung. Jeder hat eine Lösung oder sogar einen Hinweis.

Update: Die Suchpfade user header Werden in allen Konfigurationen auf ${BUILT_PRODUCTS_DIR} Gesetzt. Es kann problemlos mit jeder Konfiguration erstellt werden, außer bei der Archivierung.

Update 2: Merchant.h Ist eine Core Data-Klasse, die automatisch generiert wird und daher im Paket .xcdatamodeld Enthalten ist Header werden alle in das öffentliche Header-Verzeichnis kopiert, wenn die Bibliothek erstellt wird.

96
rjstelling

NB: Die folgenden Schritte lösen 90% Ihrer Probleme mit dem Xcode-Archiv. Aus den Kommentaren geht jedoch hervor, dass Sie versuchen, Xcode zu beenden zuerst. Dies erspart Ihnen möglicherweise Stunden beim Einstellen von Einstellungen.

  1. Überprüfen Sie, ob die "Benutzerkopfzeilenpfade" korrekt sind (fügen Sie "" Pfaden für Leerzeichen sowohl in Ihrem Projekt als auch in Abhängigkeiten hinzu).
  2. Setzen Sie "Benutzerpfade immer durchsuchen" auf JA
  3. Erstellen Sie in Ihrem Projekt einen Gruppenaufruf "Indizieren von Headern" und ziehen Sie die Header in diese Gruppe, NICHT fügen Sie nach Aufforderung Ziele hinzu. Dies beinhaltet alle Header in Ihrem . Xcdatamodeld. Sie müssen mit der rechten Maustaste klicken und den Paketinhalt anzeigen, um sie zu finden.
  4. Setzen Sie für alle Abhängigkeiten die Build-Einstellung "Skip Install" auf "Yes"
  5. Verschieben von "öffentlichen" Kopfzeilen in Erstellungsphasen nach "Projekt"
  6. Setzen Sie die Build-Einstellung "Installationsverzeichnis" auf Ihrem Ziel auf $(LOCAL_APPS_DIR)
  7. Ändern Sie die Zielerstellungseinstellung "Alle Quelldateien nach Includes durchsuchen" in YES. ( link )
  8. Bei neueren Versionen von Xcode (> 4.2) möchten Sie möglicherweise lesen Sie diese Frage in Bezug auf Arbeitsbereiche.
  9. Manuell Löschen der project.xcworkspace-Dateien von allen Projekten, auf die verwiesen wird
118
rjstelling

Ich hatte das gleiche Problem in XCode 4: "Lexikalisches oder Präprozessor-Problem MyFile.h nicht gefunden". MyFile.m war jedoch keine statische Bibliothek, sondern nur eine Standardklasse. Und MyFile.m und MyFile.h wurden ordnungsgemäß in das Projekt aufgenommen und indiziert.

Also ... Ich habe XCode und den Simulator beendet, sie dann neu gestartet und das Problem ist verschwunden.

13
richardsun

Ich habe festgestellt, dass das Problem behoben ist, als ich die Zielerstellungseinstellung "Alle Quelldateien nach Includes durchsuchen" von "Nein" in "Ja" geändert habe.

11
doc taco

Ich konnte dieses Problem beheben, ohne Änderungen an den Build-Einstellungen vorzunehmen, indem ich einfach die .h-Dateien in das Verzeichnis des Projekts im Finder kopierte. Ich habe sie NICHT zum Projekt hinzugefügt. Nur diese im Dateisystemverzeichnis des Projekts zu haben, schien ausreichend zu sein, damit die implizite Verknüpfung von Xcode ordnungsgemäß funktioniert. Weitere Details hier .

6

Meine Lösung bestand darin, meine zu ändern

#import "HeaderFile.h"

zu

#import <FrameworkName/HeaderFile.h>

und alles fing wieder an zu funktionieren. Was ungewöhnlich war, war, dass es nach ein paar Bauarbeiten plötzlich nicht mehr funktionierte.

4
slcott

Ich hatte so ein komisches Problem. Das Ändern von "Alle Ressourcendateien durchsuchen ..." in "Ja" hat nicht geholfen. Ich habe mir die Framework-Suchpfade angesehen und festgestellt, dass dies der Fall ist

  • $ (geerbt)
  • "$ (SRCROOT)"
  • "$ (SRCROOT)/my/correct/path"

Es schien richtig zu sein, aber es schlug immer noch fehl. Ich habe dann versucht, die Reihenfolge von 2 & 3 neu zu ordnen, und plötzlich hat es gut funktioniert. Ich bin mir also nicht sicher, warum das so ist, wollte es aber der Liste der Dinge hinzufügen, die ich ausprobieren möchte, falls es jemand anderem hilft.

4
dizy

Das Problem hat sich von selbst gelöst, als ich eingestellt habe

Einstellungen erstellen-> Projekt-> Suchpfade auf Ja

2
Karolyn

Ich hatte die gleichen - 2 Ziele in meinem Projekt (Projekt und Projekttest von GHUnit). Als mein Schema auf Projekt eingestellt war, wurde der Import von <GHUnitIOS/GHUnit.h> war ein Problem von "lexikalische oder Präprozessor-Problemdatei nicht gefunden". Aber als ich als Schema ProjectTest eingestellt habe, war alles in Ordnung. Also habe ich hinzugefügt GHUnitIOS.framework in Projekt auch.

2
goodliving

Ich habe den Fehler "Datei nicht gefunden" für eine bestimmte .h-Datei in meinem Projekt erhalten. Ich habe das Problem behoben, indem ich die .h-Datei aus dem Projekt entfernt (Auswahl von "Referenzen entfernen") und sie erneut hinzugefügt habe.

1
cduhn

Anscheinend sind Ihre Header-Suchpfade in den Build-Einstellungen für das aktive Schema nicht richtig konfiguriert. Überprüfen Sie sie und aktualisieren Sie Ihre Frage mit der aktuellen Einstellung.

1
Joshua Nozzi

Hinzufügen weiterer Varianten: Ich hatte zwei Instanzen von foo.m in dem Compile Source Erstellungsphase, die zum Teil dazu führte, dass "Header nicht gefunden" für foo.h.

1
freespace

Ich habe ähnliche Probleme mit dem Simulator, aber nicht mit dem Gerät, und meine Header-Suchpfade sind leer (Scheint die Standardeinstellung zu sein). Aber ein Wechsel der Arbeitsbereiche scheint das Problem gelöst zu haben. Vielleicht können Sie versuchen, einen neuen Arbeitsbereich zu erstellen, Ihr Projekt hinzuzufügen und herauszufinden, ob dies hilfreich ist. Jetzt untersuche ich warum.

1
Norman G

Noch eine Chance:

Im Workspace-Projekt: Beachten Sie im Abschnitt Ziel für Build-Phasen. Wie in vielen Handbüchern angegeben, müssen Sie über eine Erstellungsphase für das Kopieren von Dateien verfügen, um alle Ihre Header an einen anderen Ort zu kopieren, da iOS Framework keine freizugebenden Header-Dateien enthalten kann (dies ist mein Fall).

Wählen Sie für das Kopieren von Dateien als Ziel die Option "Produktverzeichnis". Oder ein anderes Verzeichnis, in dem sich die Überschriften befinden.

Das hat bei mir geklappt. Wahrscheinlich unterscheidet sich das Build für Archive (oder Release) -Verzeichnis erheblich von dem Build für Debug.

Überprüfen Sie auch in Ihren Arbeitsbereichseinstellungen Ihr Erstellungsverzeichnis.

XD

1

Bei mir trat dieses Problem auf, nachdem ich dem Projekt neue Dateien hinzugefügt hatte. ein Leerzeichen .m und .h, abgeleitet von NSObject. So habe ich es gelöst:

  1. XCode geschlossen und neu gestartet
  2. Löschte die beiden neuen Dateien über XCode
  3. Erfolgreich neu kompiliert

Ich habe sie anschließend erneut hinzugefügt und es hat auch funktioniert.

Auf jeden Fall ein Fehler in xCode ...

0
g-dog