Build Error - fehlende erforderliche Architektur i386 in der Datei

105

Beim Erstellen meiner iPhone-Anwendung wird folgende Fehlermeldung angezeigt:

ld: Warnung: In /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit fehlt die erforderliche Architektur i386 in der Datei

Dies gilt für alle Frameworks in meiner App. Es ist sehr seltsam, da dies nicht früher geschah.

Gabe Shahbazian
quelle
Ist dies passiert, nachdem Sie Snow Leopard und das neue iPhone SDK (Xcode 3.2) installiert haben?
Avocade
8
Meine Antwort behebt das Problem. Bitte prüfen.
Jordanien
9
Eine andere Möglichkeit, die in den Antworten nicht behandelt wird, besteht darin, dass Sie diesen Fehler erhalten, wenn Sie einen Verweis auf ein nicht universelles Framework hinzugefügt haben (dh Sie haben ein armv6 / armv7-Framework hinzugefügt und dann versucht, einen Simulator-Build durchzuführen). Dies ist hauptsächlich dann ein Problem, wenn Sie Ihre eigenen benutzerdefinierten Frameworks erstellt haben.
aroth
@aroth ist auch richtig, bitte überprüfen Sie diese Frage
ArkReversed

Antworten:

131

Dies geschieht, wenn Sie Ihrem Projekt ein Framework hinzufügen und das Framework unbeabsichtigt in Ihr Projektverzeichnis kopieren.

Die Lösung besteht darin, Ihr Projektverzeichnis (in dem Sie Ihr Projekt auf der Festplatte speichern) auf iPhone SDK * .Framework-Dateien zu überprüfen und diese zu löschen.

Das Projekt wird danach gut gebaut.

Jordanien
quelle
4
Testen Sie es außerdem auf einem iOS-Gerät anstelle von Simulator.
Raptor
Wenn Sie ein anderes Framework haben, scheint das Ändern der Projektdatei auch Verweise darauf zu löschen. Dies funktionierte jedoch und war einfacher, dank Jordanien
Texian
Funktioniert bei mir nicht Keine .framework-Dateien in meinem Projektverzeichnis. Fwiw, ich habe sauber gemacht und dann gebaut und dieses Problem begann. Das Saubere muss irgendwie kaputt gegangen sein.
Alyoshak
85

Ich hatte das gleiche Problem und die Lösung erwies sich als einfache Lösung. Sichern Sie dann project.pbxproj (in Ihrem Projektdateibündel) in TextMate oder TextEdit und suchen Sie nach dem Abschnitt "/ * XCBuildConfiguration-Abschnitt starten * /". Suchen Sie nach einem Schlüssel mit dem Namen FRAMEWORK_SEARCH_PATHS und löschen Sie ihn und seinen Inhalt (einmal pro Build-Konfiguration, also habe ich ihn an zwei Stellen entfernt). Hier ist ein Beispiel für das, was ich gelöscht habe:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

Mein Projekt wurde jetzt sowohl für das iPhone-Gerät als auch für den iPhoneSimulator erstellt.

Sean Roehnelt
quelle
2
Ich kann überprüfen, ob dies wie beschrieben funktioniert. Es scheint, dass Xcode leicht mit seinen Metadaten in Kontakt kommen kann, wenn Xcode-Projekte zwischen verschiedenen Computern verschoben werden. in diesem Fall mit einem mit 3.0 und Leopard und dem anderen mit 3.1 und Snow Leopard. Die Metadaten von FRAMEWORK_SEARCH_PATHS werden in den Build-Einstellungen als leer angezeigt, während die eigentliche project.pbxproj Inhalte enthält.
Avocade
1
Das vereinbarte FRAMEWORK_SEARCH_PATHS wurde auch in den Build-Einstellungen für mich als leer angezeigt. Das Problem wurde jedoch durch manuelles Bearbeiten der Datei project.pbxproj wie beschrieben behoben.
Alasdair Allan
11
Das hat bei mir nicht funktioniert. Sie führen mich jedoch an den richtigen Ort, um nachzuschauen. Mein .pbxproj hatte nicht den Schlüssel FRAMEWORK_SEARCH_PATHS, sondern einen Schlüssel namens LIBRARY_SEARCH_PATHS.
Rebellion
Ich zweite @ Rebellion. Möglicherweise haben die neueren XCode-Versionen den Schlüsselnamen geändert.
Moshe
Danke, ich hatte auch einen streunenden LIBRARY_SEARCH_PATHS-Schlüssel in meiner pbxproj-Datei. Der Schlüssel wurde in den Projekteinstellungen in Xcode 3 fett gedruckt, jedoch ohne Wert. Dies ließ mich glauben, dass etwas nicht stimmte. Ich habe das Projekt einmal in Xcode 4 Preview 5 geöffnet, danach geschah dies.
Mvexel
43

Was hier passiert ist, ist, dass Xcode auf mysteriöse Weise einen Eintrag "Framework Search Paths" hinzugefügt hat, der auf ein bestimmtes iPhone-Geräte-SDK verweist. Zum Beispiel wurde meine kürzlich auf Folgendes eingestellt:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

Dies führt dazu, dass der Compiler Frameworks mit der falschen Architektur findet. Durch Entfernen von Werten unter dem Schlüssel "Framework-Suchpfade" in den Build-Einstellungen Ihres Ziels wird das Problem behoben.

John Cromartie
quelle
Das war das Problem in meinem Fall. Jedes Mal, wenn ich eine neue Bibliothek hinzufügte, wurden eine Reihe von Suchverzeichnissen hinzugefügt. Selbst wenn ich den Verweis entferne, war der Suchverzeichniseintrag dort, der das Problem verursacht hat.
Darshansonde
"Framework Search Paths" sind in meinem Fall bereits leer. Der genaue Fehler, den ich erhalte , ist ld: Erstellen für iOS Simulator, aber Verknüpfung mit Dylib, erstellt für MacOSX-Datei '/usr/lib/libSystem.B.dylib' für Architektur i386 clang: Fehler: Linker-Befehl fehlgeschlagen mit Exit-Code 1 ( Verwenden Sie -v, um den Aufruf anzuzeigen.) Ich verwende SDK 7.0 für Mavericks.
Ans
Ich hatte den gleichen Fehler, ich habe die Werte aus dem Framework-Suchpfad unter Build-Einstellungen entfernt und jetzt wird es erfolgreich kompiliert.
Nirav
10

Ich wollte das nur in XCode erwähnen, wenn Sie zu "Projekteinstellungen bearbeiten" gehen und "Suchpfade" suchen. Es gibt ein Feld für "Framework-Suchpfade". Durch das Aktualisieren sollte das Problem behoben werden, ohne dass die Projektdatei gehackt werden muss!

Prost!

Jesse


quelle
Ich habe das gleiche Problem, das mich absolut verrückt macht. Es sieht so aus, als ob ihr die Lösung kennt, aber ich kann die Datei "project.pbxproj" nicht finden und kann nicht finden, wo sich "Projekteinstellungen bearbeiten" befindet.
Saman01
2
In XCode 4.2.1 habe ich Folgendes gefunden: Klicken Sie im Projektnavigator auf den Projektnamen. Wählen Sie im angezeigten Eigenschaftenbildschirm die Registerkarte "Build-Einstellungen". Die Suchpfade befinden sich in diesem Bildschirm. Das Löschen hat bei mir funktioniert.
Dsteele
8

Stellen Sie sicher, dass Sie das Framework beim Hinzufügen nicht in Ihr Projekt kopiert haben. Wenn Sie es kopiert haben, können die ursprünglichen Pfade nicht gefunden werden. Um dieses Problem zu beheben. Löschen Sie das AVFoundation-Framework aus Ihrem Framework-Ordner in Ihrem Projekt und fügen Sie es erneut hinzu. Stellen Sie jedoch diesmal sicher, dass die Kopierprüfung nicht markiert ist.

Das hat es für mich behoben!

Jrman52
quelle
8

Ich habe es auf eine andere Weise behoben. Der Grund, warum ich diesen Fehler bekam, war, dass ich security.framework zweimal in meinem Projekt hinzugefügt habe. Ich konnte das Sicherheitsframework in xcode nicht sehen, ich habe das Projekt im Finder geöffnet und dieses Framework gefunden, das Ich habe gelöscht und Problem gelöst.

Suraj K Thomas
quelle
7

Wenn Ihre App auf dem Gerät ausgeführt werden soll, stellen Sie sicher, dass Sie nicht versuchen, sie auf dem Simulator auszuführen. Mag offensichtlich klingen, aber trotzdem prüfen.

Eric Brotto
quelle
5

Obwohl es möglich ist, dass etwas gelöscht wurde, habe ich die Erfahrung gemacht, dass etwas in der Projektdatei durcheinander geraten ist. Ich muss noch genau sagen, was dieses "Etwas" ist. Ich hatte ähnliche Probleme, wenn die SDK-Installation in Ordnung ist. Es gibt mehrere Möglichkeiten.

Fügen Sie zunächst alle Ihre Dateien zu einem neuen Projekt hinzu. Dies scheint normalerweise zu funktionieren. Eine Art Schmerz.

Zweitens können Sie in XCode / Get Info / Build / Library Search Paths mit der rechten Maustaste auf das Projekt klicken. Fügen Sie neue Pfade hinzu, die /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib ähneln. Fügen Sie für jede Version (2.2.1 usw.) und Plattform (Simulator oder iPhoneOS) geeignete Versionen dieser Zeichenfolge hinzu. Führen Sie eine ähnliche Aktion für Framework-Suchpfade aus, wenn Frameworks Ihr Problem sind.

Drittens, was mehr Arbeit, aber zuverlässiger ist, ist das Öffnen von project.pbxproj in MyProject.xcodeproj (Textmate ist dafür gut geeignet). Suchen Sie nach "/ * Begin XCBuildConfiguration section * /", dann nach "LIBRARY_SEARCH_PATHS" und "FRAMEWORK_SEARCH_PATHS". Fügen Sie die Pfade entsprechend hinzu oder ändern Sie sie, und speichern Sie die Datei.

Auf jeden Fall ein Schmerz im Hintern, und ich würde sicher gerne die Ursache herausfinden, weil ich das schon ein paar Mal hatte. Das Projekt läuft gut, dann einfach hoch und weigert sich, dies aus einem scheinbar kleinen Grund zu tun.

mikestew
quelle
Ich werde gerade ein neues Projekt starten. Oh gut.
Gabe Shahbazian
Sie können die Build-Einstellungen für "Frameworks Search Paths" im Infofenster eines Ziels korrigieren.
John Cromartie
Ich habe den Fehler erhalten, hatte aber nicht die oben beschriebenen Framework-Probleme. Seltsamerweise konnte das Projekt auf einem Computer aus SVN ausgecheckt und einwandfrei erstellt werden, während es auf zwei anderen plötzlich bei jedem Build zu diesem Fehler führte. Die einzige (und ziemlich einfache) Lösung bestand darin, nach dem Ausprobieren aller möglichen anderen Lösungen ein neues leeres Projekt zu erstellen und alle Dateien darin zu verschieben.
mmattke
Diese Methode hat bei mir funktioniert. Ich hatte ein funktionierendes Projektset, das eines Tages plötzlich für genau eine Konfiguration nicht mehr erstellt wurde. Kein Grund. Verwendete die oben beschriebene Textmate-Technik und stellte fest, dass "$ (SDKROOT) / Developer / Library / Frameworks" in dieser Konfiguration fehlte. Keine Ahnung warum, und ich konnte dies mit Xcode nicht sehen.
Rob
4

"Projekteinstellungen bearbeiten" und "Suchpfade" suchen Es gibt ein Feld für "Framework-Suchpfade". alles löschen!!

Litebeam
quelle
4

Das ist mir auch hier passiert. Dank eines großartigen Partners haben wir die Antwort gefunden. Ihr Xcode zeigt möglicherweise auf den Simulator. Ändern Sie ihn stattdessen auf ein iOS-Gerät.

j2emanue
quelle
1

Führen Sie den Befehl file auf dem Framework vom Terminal aus:

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

Sie sollten eine Nachricht erhalten, in der Sie darüber informiert werden, mit welchen Architekturen die UIKit-Binärdatei kompatibel ist. Wenn "i386" nicht aufgelistet ist, haben Sie es irgendwie geschafft, die i386-Version von UIKit zu entfernen, was bedeutet, dass Sie nicht für den Simulator erstellen können. Um dies zu beheben, müssen Sie erneut installieren das SDK.

Wenn Sie einen anderen Fehler erhalten, können Sie hoffentlich herausfinden, wo das eigentliche Problem liegt.

Mark Bessey
quelle
SDK neu installiert und ich bekomme immer noch den gleichen genauen Build-Fehler.
Gabe Shahbazian
Ich habe dieses Problem. Framework und Bibliothekspfad bereits überprüft und sie sind sauber. In der Befehlsdatei /Developer/Platforms.../UIKit.framework/UIKit steht nur "Mach-O Dynamic Linked Shared Library Arm". Ist es wirklich notwendig, das gesamte SDK zu installieren? Oder kann ich die Vollversion des Frameworks kopieren?
Alexander Fradiani
Gut zu lernen! für meinen Fall sind armv7 und i386 da, aber kein armv6!
Nianliang
1

Ich möchte Sie nur wissen lassen, dass ich in meinem Fall das gleiche Problem hatte und feststellte, dass ich einen älteren Xcode-Ordner namens Xcode3.1.3 hatte. Ich habe ihn einfach umbenannt, weil es eine ältere Version war und das hat die Magie für mich getan.

Raya2
quelle
1

Überprüfen Sie die Suchpfade Ihrer Bibliothek in Ihren Zieleinstellungen. Manchmal werden dort doofe Bibliotheken eingegeben, und dies führt zu einem ähnlichen Fehler.

Sie können alle Einträge in diesem Abschnitt entfernen.

Atma
quelle
0

Ich hatte gerade etwas anderes erlebt, weil ich an meiner eigenen Bibliothek (WM_GSRecognizerLib) arbeite, aber der Fehler ist der gleiche.

Was würde passieren: Aufgrund einiger Updates stammte der Pfad für die einzuschließende Bibliothek (.a) aus dem Ordner "Debug-iphoneos" (wo er generiert wird). Das Kompilieren für generische iOS-Geräte funktionierte einwandfrei, jedoch nicht für den Simulator. Sie beschwerten sich über die fehlende i386-Architektur.

Was ich für dieses Problem getan habe, ist, auch die Binärdateien aus dem Ordner "Debug-iphonesimulator" einzuschließen.

Dies kann für dieses Thema hilfreich sein, da die Erklärung hier lautet: Geräte benötigen Binärdateien für arm64 / armv7 / armv7s, während Simulator i386 benötigt.

tontonCD
quelle
0

Meine Lösung bestand darin, das Simulator-Ziel-Debugging auf JA zu setzen. Schauen Sie sich einfach den Git-Status an, um zu sehen, dass die neue Zeile nur in .project als Architektur hinzugefügt wurde. Wenn Sie dies nicht festlegen, wird der Build für alle Architekturen ausgeführt und zeigt einige fehlende Architekturen wie i386 oder andere an. HINWEIS: Das Hauptproblem besteht offensichtlich darin, ein Framework zu verwenden, das eine bestimmte Architektur implementiert.

Guilherme Pedriconi
quelle
-1

Ich habe auch den gleichen Fehler bei der Verwendung von xcode Version 4.0.2 erhalten. Ich habe also die xcode-Projektdatei ausgewählt und aus der Option "Ziel" die App meines Projekts angezeigt. Ich habe darauf geklickt und bin zum Build gegangen Einstellungsoption.

In der Suchoption habe ich den Framework-Suchpfad eingegeben und alle Einstellungen gelöscht und dann auf die Schaltfläche zum Erstellen geklickt. Das hat bei mir ganz gut funktioniert.

Danke und Grüße

Radix
quelle