Wie Baue Cocoa Touch Framework für die i386-und x86_64-Architektur?
Nach dem Bau einer Cocoa Touch framework (Swift-oder Objekt-C) und die Zugabe zu einem anderen Projekt als "Embedded Binaries" bekomme ich die folgende Fehlermeldung, wenn ich versuche,
missing required architecture i386
...
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Folgenden werden verschiedene bereits vorhandene Antworten und erweiterte Forschung, die ich bereits Hinzugefügt i386 der Architekturen build-Einstellungen ...
Allerdings scheint dies nicht, um eine Wirkung zu erzielen. Wenn ich mit
lipo -info TesterFrameworkObjC
Bekomme ich nur
Architectures in the fat file: TesterFrameworkObjC are: armv7 arm64
... sollte das nicht i386 (und x86_64) erscheinen auch hier? Was bin ich?
(Ich bin mit Xcode 6.2 + Gebäude für iOS-8.2)
Einige neue Erkenntnisse
Verwendung einer version dieser build-Skript ich in der Lage bin zu bauen, die fehlenden Architekturen für die schnelle version des Frameworks.
Aber wenn ich das framework auf meine app und bauen bekomme ich noch Fehler
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$__TtC20TesterFrameworkSwift18TestFrameworkSwift", referenced from:
objc-class-ref in ViewController.o
ld: symbol(s) not found for architecture x86_64
Blick auf das Letzte build Ordner Gebäude für den simulator
Build/Products/Debug-iphoneos/TesterFrameworkSwift.framework/
Kann ich sehen, dass die Architekturen, die noch fehlen, obwohl Sie Teil des Rahmens (wie gezeigt). Wie kann ich sicherstellen, dass alle die richtige Architektur baut meiner framework enthalten sind, beim erstellen der app?
Update
Blick auf all die Fehlermeldungen bei mir sieht das Problem nicht eigentlich, um die falschen Produkte/archictures gebaut, sondern einen Schritt später gibt es die Linker nicht mit dem richtigen Wege. Nicht sicher, wie Sie Sie korrigieren.
- Nein, ich benutze nur Foundation. Und ich habe nur eine Funktion zum testen.
- Haben Sie Ihre Rahmen mit Simulator oder iDevice. Wenn Sie bauen mit iDevice, schafft es den Rahmen für die Geräte-Architektur: armv7, armv7s, arm64. Wenn Sie bauen für den simulator von XCode erstellt-framework i386 & x86_86 (simulator 64bits). Sie müssen Gruppe diese 2 Bibliotheken in ein universal-Bibliothek, um eine vollständige Architektur-Bibliothek.
- Werfen Sie einen Blick auf diese Artikel, Sie werden den Weg finden, zu erstellen, die Universelle framework: raywenderlich.com/41377/...
- Ich habe versucht, beide Gebäude mit einem ausgewählten Simulator oder dem Gerät. Der integrierte Rahmen enthält nie i386/x86 ... also ich bin auch nicht an dem Punkt, wo ich erstellen Sie eine universal binary.
- auch ich habe versucht, die Artikel und das Skript, das Sie miteinander verknüpft. Es hat nicht funktioniert ... nicht sicher, ob es ist, weil es zu Statischen Rahmenbedingungen, die nicht ist, was ich Baue.
- In der Tat, Rahmen ist nur ein spezieller Ordner, der enthält eine statische Bibliothek. Versuchen Sie zuerst bauen Ihre Rahmen für den Simulator dann überprüfen, ob die framework-Architektur i386 & x86_64. Dann finden Sie weitere Artikel zum erstellen von universellen Rahmen. Beispiel: spin.atomicobject.com/2011/12/13/...
- In der Tat, wenn ich erste "saubere build-Ordner" (name.Rahmen wird rot) Gebäude für den Simulator nicht zu schaffen mit dem Produkt (- Namen.Rahmen bleibt rot). Nur Gebäude für das Gerät legt den Namen.Rahmen (nicht einschließlich die i386-und x86_64-Versionen).
- Ich habe diesen link, um ein universelles framework: gist.github.com/cromandini/1a9c4aeab27ca84f5d79
- Haben Sie vielleicht ein problem mit Gebäude für den simulator Ziel. Werfen Sie einen Blick auf XCode-build-log, um zu überprüfen, dass alles ok ist.
- Danke, das ist gut. Mit dem script, das ich in der Lage bin zu bauen, die fehlenden Architekturen des Frameworks. Jedoch beim erstellen der app bekomme ich noch Fehler wie "Undefined symbols for architecture x86_64:" mit Blick auf die "Build/Products/Debug-iphoneos/TesterFrameworkSwift.Rahmen/" ich kann sehen, dass die x86_64 bauen, Architektur ist nicht enthalten in dieser letzten Etappe.
- Das scheint wie ein ziemlich schwerer bug in XCode. Ich habe immer noch das problem mit XCode 6.3 und kann einfach nicht bauen einen Rahmen, sowohl für den simulator und Geräte. @Bernd, hast du eigentlich das Problem lösen irgendwie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist die gleiche problem, die ich hatte.
Scheint, dies ist ein Xcode Fehler, ich Problemumgehung es durch hinzufügen einer build-Skript.
Es wird nur kompilieren Sie Ihre Bibliothek mit allen Architekturen, und
lipo
es zu Fett binären Bild.Beachten Sie auch
sind Sie auf der Suche x86_64 und i386-images in den iphone Ordner erstellen, Sie sollten in
Debug-iphonesimulator/TesterFrameworkSwift.framework/
Gibt es auch ein rekursions-Problem in deinem Skript habe ich korrigiert es.
6) Treffer
"cmd + B"
(Projekt Erstellen)7) Öffnen, Produkt in
Finder
8) Navigieren 1 Verzeichnis ("cmd + ↑"), und Sie werden sehen
"Release-universal"
- Verzeichnis.Es wird Ihre
"fat/universal"
- Bibliothek, Sie sind bereit zu gehen!Können Sie es überprüfen, über
${PROJECT_DIR}
. Ich fand es nicht in meinemDerivedDara
Ordner.Stoße ich auf das gleiche problem und zum Glück habe ich es gelöst.
Beim erstellen eines framework mit Xcode und erstellen Sie Sie mit der iPhone 5 simulator oder der simulator vor dem iPhone 5(wie iPhone 4s oder iPhone 4),erhalten Sie einen Rahmen mit i386-Architektur.Und wenn Sie bauen es mit iPhone 5s simulator oder den simulatro nach iPhone 5s,erhalten Sie einen Rahmen mit x86_64-Architektur.
Aber wenn Sie das framework in Ihr Projekt und Sie möchten, um die app auszuführen, die auf einem simulator,der Rahmen muss enthalten sowohl die i386-und x86_64-Architektur,andernfalls bekommst du ein linker-Fehler.
So müssen Sie die Verwendung von lipo -create-Befehl zum Zusammenführen von zwei Rahmen,an dieser Stelle dein Rahmen ist bereit für den Einsatz.
Gehen Build-Einstellungen -> Set Build-Active-Architektur Nur zu KEINE
Bauen Ihre Rahmen in iPhone 5 und iPhone 6 oder höher Simulatoren.
Fügen Sie das Skript in post-Aktionen zu generieren, die universal-Rahmen.
Gehen zum terminal und geben Sie cd (Pfad zu Ihrem Rahmen, oder drag-and-drop-framework), die Sie zu dem frameworks-Verzeichnis
Typ Datei YOUR_FRAMEWORK_NAME listet alle Architekturen framework unterstützt
können Sie sehen, dass Ihr framework unterstützt alle vier Architekturen i386, x86_64, armv7 arm64.
Active-Architektur => KEIN
Gültige Architektur => ""armv7" armv7s arm64 i386 x86_64"
Verwenden Oben Bauen Einstellung, wenn in der Aggregation !!!
Ich arbeitete für mich für alle Architektur-Framework Erstellung