2015-02-27 10 views
5

Ich habe ein benutzerdefiniertes Objective-C-Framework erstellt. Ich möchte es in ein beliebiges iOS-Projekt importieren und die bereitgestellten Funktionen sowohl auf dem iOS-Simulator als auch auf einem tatsächlichen Gerät verwenden. Um das Framework zu importieren, verknüpfe ich es mithilfe der Einstellung Build-Phasen> Link Binary mit Bibliotheken im Ziel der App. Ich bin dann in der Lage es in einen meiner Klassen mit dieser Aussage zu importieren:Xcode 6 Fehler - "Fehlende erforderliche Architektur i386" Beim Erstellen für iOS Simulator

#import <CustomFramework/CustomFramework.h> 

ich ganz gut meine Rahmen der Klassen instanziieren kann, aber wenn ich versuche, mein Projekt auf einem Gerät laufen zu lassen, erhalte ich die folgenden Fehler Nachricht:

dyld: Library not loaded: @rpath/CustomFramework.framework/CustomFramework 
Referenced from: /var/mobile/Applications/A61E882D-481A-4C0B-B4FD-69F5D24968BF/TestApp.app/TestApp 
Reason: image not found 

Und wenn ich versuche, es auf dem Simulator zu laufen, erhalte ich eine andere Fehlermeldung:

ld: warning: ignoring file /Users/user/Desktop/CustomFramework.framework/CustomFramework, missing required architecture i386 in file /Users/user/Desktop/CustomFramework.framework/CustomFramework (2 slices) 
Undefined symbols for architecture i386: 
    "_OBJC_CLASS_$_CustomFramework", referenced from: 
     objc-class-ref in AppDelegate.o 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Dies geschieht, wenn ich eine Klasse aus dem Rahmen instanziiert. Wenn ich das Framework importiere, es aber nicht benutze, wird meine App erfolgreich erstellt. Es sind nur Fehler, wenn ich aus irgendeinem Grund eine Klasse aus dem Framework instanziiere.

Um die App auf einem Gerät zu bauen, folgte ich this SO Antwort. Anstatt das Framework zu verknüpfen, habe ich eine neue Phase "Dateien kopieren" in die Build Phases Einstellung des Ziels hinzugefügt, das Ziel auf Framework gesetzt und mein Framework hinzugefügt.

Das funktioniert gut; Allerdings möchte ich meine App auch im iOS-Simulator testen. Wenn ich versuche, meine App auf dem Simulator auszuführen, erhalte ich immer noch den Fehler "fehlende erforderliche Architektur i386". Ich habe die vorgeschlagenen Lösungen zu fast jedem SO-Thema ausprobiert, das ich finden konnte, und nichts hat mir geholfen, dieses Problem zu lösen.

Bitte beachten Sie, dass ich versuche, mein benutzerdefiniertes Framework in einem neuen Xcode-Projekt zu verwenden, sodass keine der app/build-Einstellungen von ihren Standardeinstellungen geändert wurden.

Wie kann ich diesen Fehler beheben, sodass ich meine App sowohl auf dem iOS Simulator als auch auf einem Gerät mit meinem Framework ausführen kann, das im Projekt enthalten ist? Jeder Einblick würde sehr geschätzt werden!

Antwort

5

Das Problem war, dass das Framework nicht für die iOS Simulator-Architektur kompiliert wurde, die i386 ist. Xcode kompiliert nur ein Framework für die Zielarchitektur. Wenn ich also das Framework für den iOS-Simulator erstellen würde, würde es auf einem Gerät nicht funktionieren. Wenn ich das Framework für ein Gerät erstellen würde, würde es auf dem iOS-Simulator nicht funktionieren.

habe ich meine Rahmen von Grund auf mit Hilfe von diesem Tutorial: http://www.raywenderlich.com/65964/create-a-framework-for-ios

Die Multi-Architektur-Build-Skript ist, was mein Rahmen sowohl auf dem iOS-Simulator und einem Gerät ausgeführt werden dürfen.

+2

Vielen Dank für die Antwort! Dennoch ist es absurd, dass wir bis zum Jahr 2015 immer noch auf manuelles Bauen zurückgreifen müssen, um einen anständigen Rahmen zu bekommen (das Tutorial ist wie, 10 Seiten lang ?!). Schande über dich, Apple! – Rick77

+1

@ Rick77 Gut zu helfen! Ich stimme vollkommen zu.Ich entwickle auch Apps für Windows und Windows Phone, und darüber musste ich auf diesen Plattformen noch nicht einmal nachdenken. – Alexander

+0

@Alexander Mein Framework wurde nicht für die Architektur des iOS Simulators kompiliert. Es unterstützt nur das Gerät, Wie ich mein Framework in Simulator arbeiten lassen kann. Ich benutze Framework. – Arun

0

Ich stieß auf das gleiche Problem mit Xcode 7.1 beim Versuch, für den Simulator zu bauen. Jemand anderes sagte, dass es unter Xcode 8.2.1 für sie funktionierte, also habe ich versucht, dort zu bauen/läuft und es hat funktioniert. Ich musste Ziele oder irgendetwas in meinem Projekt nicht ändern.

Also versuchen Sie, Ihren Xcode zu aktualisieren, wenn Sie können, werden Sie vermutlich auch zusätzliche Fehlerbehebungen bekommen.