it-swarm.com.de

iOS-App mit Framework auf dem Gerät abgestürzt, dyld: Bibliothek nicht geladen, Xcode 6 Beta

Dieser Absturz war ein Blockierungsproblem. Im Grunde habe ich die folgenden Schritte zur Reproduzierung des Problems verwendet:

  • Erstellen Sie ein Cocoa Touch Framework-Projekt
  • Fügen Sie eine Swift-Datei und eine Klasse hinzu Dog
  • Rahmen für das Gerät erstellen
  • Erstellen Sie eine Single View-Anwendung in Swift
  • Framework in App-Projekt importieren
  • Instantiieren Sie die Swift-Klasse aus dem Framework in ViewController
  • App auf Gerät erstellen und ausführen

Die App ist beim Start sofort abgestürzt, hier ist das Konsolenprotokoll:

dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
  Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
  Reason: image not found

Ich habe versucht, auf iOS 7.1- und 8.0-Geräten zu bauen, beide haben den gleichen Absturz. Ich kann jedoch App erstellen und auf dem Simulator laufen. Mir ist auch bekannt, dass ich das Framework von Required in Optional in Link Binary With Libraries ändern kann, aber das Problem wurde dadurch nicht vollständig gelöst, dass die App beim Erstellen einer Instanz abstürzte von Hund . Das Verhalten ist auf Geräten und Simulatoren unterschiedlich. Ich vermute, dass wir das Framework für Geräte nicht mit der Betaversion von Xcode verteilen können. Kann jemand dies beleuchten?

500
vladof81

Auf der Registerkarte General des Ziels befindet sich ein Feld Embedded Binaries. Wenn Sie das Framework dort hinzufügen, ist der Absturz behoben.

Referenz ist hier in den Apple Entwicklerforen.

897
vladof81

Für iOS größer oder gleich 8

Fügen Sie auf der Registerkarte Allgemein des Ziels im Abschnitt Eingebettete Binärdateien das Framework hinzu. Dadurch wird das Framework in das Kompilierte kopiert, sodass es zur Laufzeit verlinkt werden kann.

enter image description here

Warum passiert dies? : weil das Framework, zu dem Sie eine Verknüpfung herstellen, als dynamisch verknüpftes Framework kompiliert wird und somit zur Laufzeit verlinkt wird. 

Hinweis: Das Einbetten benutzerdefinierter Frameworks wird nur in iOS> 8 unterstützt und daher folgt eine alternative Lösung, die mit älteren Versionen von iOS funktioniert. 

Für iOS weniger als 8

Wenn Sie Einfluss auf dieses Framework haben (Zugriff auf den Quellcode/Build-Prozess haben), können Sie dieses Framework so ändern, dass es statisch und nicht dynamisch verlinkt wird. Dadurch wird der Code in Ihre kompilierte App eingefügt und nicht zur Laufzeit verlinkt, sodass das Framework nicht eingebettet werden muss.

How: Ändern Sie auf der Registerkarte Build Setting des Frameworks im Abschnitt Linking den Mach-O-Typ in Static Library. Sie sollten das Framework jetzt nicht mehr unter eingebetteten Binärdateien einfügen müssen. 

Static Framework

Assets einschließen: Um Dinge wie Bilder, Audio oder Xib/Nib-Dateien einzuschließen, empfehle ich, ein Bundle zu erstellen (im Wesentlichen ein Verzeichnis, weitere Informationen hier bit.ly/ios_bundle) und dann die Assets mit NSBundle aus dem Bundle zu laden . 

238
Dawson

Das Framework einfach in Ihr Projekt zu ziehen, ist nicht gut genug. Das ist, als ob man im selben Stadion wäre, aber seine Kinder nicht finden kann. Folge diesen Schritten:

1) Erstellen Sie Ihr Framework

  • Entwickeln Sie Ihren Rahmen.
  • Sobald Ihre Entwicklung abgeschlossen ist, erstellen Sie mit COMMAND + B Ihr Framework und stellen Sie sicher, dass Sie "Build Succeeded" erhalten.

 enter image description here

2) Greifen Sie auf Ihr Framework zu

  • Sobald Ihr Rahmenprojekt erfolgreich erstellt wurde, können Sie in Ihrem Products-Ordner in Ihrem Projekt darauf zugreifen.

 enter image description here

  • Klicken Sie mit der rechten Maustaste auf Ihren .framework und wählen Sie "Im Finder anzeigen".

 enter image description here

3) Platzieren Sie Rahmen in Ihrem Projekt

  • Ziehen Sie den .framework aus Ihrem Finder-Fenster in den Ordner "Framework" Ihres App-Projekts.

 enter image description here

4) App-Projekt für Framework konfigurieren

  • Wählen Sie die oberste Ebene in Ihrem Projekt

 enter image description here

  • Wähle dein Ziel

 enter image description here

  • Gehen Sie zu "Phasen erstellen", dann "Binär mit Bibliotheken verknüpfen", und stellen Sie sicher, dass Ihr Framework enthalten ist optional ausgewählt.

 enter image description here

  • Gehen Sie immer noch in "Build Phases" nach oben links und wählen Sie die Schaltfläche + aus. Wählen Sie im Dropdown-Menü "Neue Phase" aus.

 enter image description here

  • Scrollen Sie nach unten zum neuen Abschnitt "Dateien kopieren" und stellen Sie sicher, dass Sie Destination auf "Frameworks" setzen. Lass den Unterpfad leer. Klicken Sie dann unten links auf die Schaltfläche +

 enter image description here

  • Sie werden mit Ihrer Projekthierarchie angezeigt. Blättern Sie nach unten zum Ordner "Frameworks", dem Sie das Framework in Schritt 3 hinzugefügt haben, oder suchen Sie danach in der Suchleiste oben. Wählen Sie Ihr Framework aus und klicken Sie auf "Hinzufügen".

 enter image description here

  • Stellen Sie sicher, dass Ihr Framework mit "Code Sign On Copy" ausgewählt ist.

 enter image description here

5) Reinigen Sie Ihr Projekt und führen Sie es aus

  • COMMAND + SHIFT + K
  • COMMAND + R
79
Brandon A

Versuchen Sie zuerst, nach Befehl + Wahltaste + Umschalttaste + K zu erstellen. Wenn immer noch ein Fehler auftritt, führen Sie die folgenden Schritte aus.

Wenn jemand mit diesem Fehler in Xcode 8 konfrontiert ist, ändern Sie Ihren Framework-Status in Optional anstelle von Required auf der Registerkarte General Ihres Ziels.

 enter image description here

46
Desert Rose

Ich habe mit Swift3/Xcode 8.1 ein Framework erstellt, das in einem Objective-C/Xcode 8.1-Projekt verwendet wurde. Um dieses Problem zu beheben, musste ich die Option Always Embed Swift Standard Libraries unter Build Options aktivieren.

Schauen Sie sich diesen Screenshot an:

 enter image description here

Hoffentlich hilft das!

44
NeverHopeless

Ich musste (zusätzlich zu dem, was hier erwähnt wurde) die folgende Zeile zu Runpath Search Paths unter Build Settings hinzufügen:
@executable_path/Frameworks

enter image description here

25
Aviel Gross

Ich habe in iOS 9.x die gleiche Ausgabe erhalten

AUSGABE IST:  Die App stürzt ab, sobald ich die App mit dem folgenden Fehler öffnet.
dyld: Bibliothek wurde nicht geladen: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Referenziert von: /var/containers/Bundle/Application/######/TestApp.app/TestApp Grund: Bild nicht gefunden

Ich habe dieses Problem durch Ändern von Required in Optional in Linked Frameworks and Libraries für UserNotifications.framework-Framework behoben.

24
jfalexvijay

Sie müssen das Framework einer neuen Copy Files Build-Phase hinzufügen, um sicherzustellen, dass das Framework zur Laufzeit in das Anwendungspaket kopiert wird.

Weitere Informationen finden Sie unter So fügen Sie meinem Ziel eine Kopierphase für das Kopieren von Dateien hinzu .

Offizielle Apple-Dokumente: https://developer.Apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html

24
liamnichols

Fügen Sie das Framework in Embedded Binaries hinzu  enter image description here

Dann reinigen und bauen.

13
Vineesh TP

In meinem Fall bestand die Lösung darin, das kompilierte Framework aus den Embedded Binaries zu entfernen. Hierbei handelt es sich um ein eigenständiges Projekt im Arbeitsbereich, es wird bereinigt und neu erstellt und schließlich zu Embedded Binaries hinzugefügt.

8
Andrea Leganza

Überraschenderweise sind hier nicht alle erforderlichen Teile dokumentiert, zumindest für Xcode 8.

Mein Fall war ein benutzerdefiniertes Framework als Teil desselben Arbeitsbereichs. Es stellt sich heraus, dass es falsch gebaut wurde. Basierend auf jeremyhus letzter Antwort auf diesen Thread:

https://forums.developer.Apple.com/thread/4687

Ich musste Dynamic Library Install Name Base (DYLIB_INSTALL_NAME_BASE) unter Build Settings des Framework einstellen und es dann neu erstellen. Es wurde fälschlicherweise auf $(LOCAL_LIBRARY_DIR) gesetzt und ich musste es in @rpath ändern.

In der Linkverarbeitungsphase wurde die Host-App angewiesen, sie zur Laufzeit dynamisch von /Library/Frameworks/fw.Framework/fw (wie in dem Stammverzeichnis des Dateisystems) zu laden, anstatt path-to-App/Frameworks/fw.Framework/fw.

Zu allen anderen Einstellungen: Es muss muss an 3 Stellen in Build Phases sein. Diese Einstellungen werden jedoch alle gleichzeitig festgelegt, wenn Sie sie der Einstellung Embedded Binaries der Registerkarte General der Hosting-App hinzufügen.

Ich musste not eine zusätzliche Copy Files-Phase einrichten, die in Bezug auf die Einbettungsphase ohnehin intuitiv überflüssig erscheint. Durch die Überprüfung des Endes des Build-Transkripts können wir sicherstellen, dass dies nicht erforderlich ist.

PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework

[Viele verbale Zeilen wurden entfernt, aber aus dem vereinfachten Transkript in der Xcode-Benutzeroberfläche wird deutlich.]

Ich habe immer noch no eine Idee, warum Xcode den DYLIB_INSTALL_NAME_BASE-Wert falsch für mich festgelegt hat.

7
BaseZen

Wenn Sie ein Drittanbieter-Framework verwenden und Cocoapods als Abhängigkeitsmanager verwenden, versuchen Sie, einen pod install zu verwenden, um Ihre Pods zu aktualisieren.

Dieser Absturz trat bei einer von mir verwendeten Drittanbieter-Bibliothek auf, also bin ich froh, dass die oben genannte Lösung für mich funktioniert hat, hoffe es funktioniert für Sie!

7

Meine Umgebung: Cocos2d 2.0, Box2d, Objective C

Neben den anderen oben genannten Antworten bin ich schließlich auf die Registerkarte Allgemein gegangen und habe WatchKit optional gemacht.

 Target General Linked Frameworks and Libraries Watchkit.framework Optional

7
Jim Rota

Ich hatte das gleiche Problem. Ich habe versucht, mein Projekt mit einem iPhone zu erstellen, das ich noch nie verwendet habe, und ich habe kein neues Framework hinzugefügt. Für mich funktionierte das Aufräumen gut ( Shift + Command + K ). Vielleicht liegt es daran, dass ich Beta 5 von Xcode 7 und ein iPhone 6 mit iOS 9 Beta verwende, aber es hat funktioniert.

5
Fri3ndlyGerman

Wenn Entwicklungs-Pod vorhanden ist Löschen Sie Ihre App aus dem Simulator.

2
Rajesh Kumar

In meinem Fall ist mein Projekt von Objective-C geschrieben und in der Bibliothek gibt es Swift-Dateien. Also änderte ich "Swift-Standardbibliotheken immer einbetten" in den Build-Einstellungen meines Projekts in Ja und es wurde vollkommen in Ordnung.

2
User18474728

 enter image description here

Für mich wurde die Deaktivierung von "Nur kopieren wenn installiert" in Build Phases-> Embed Frameworks aufgehoben

2
Shohin

Nach dem Ausprobieren aller im Internet verfügbaren Methoden und meiner eigenen Versuchs- und Fehler-Tricks 100 Mal. Endlich konnte ich es lösen. - Apeksha Sahu vor 6 Minuten
Gehen Sie zu iTunes in Mac -> Konten -> Diesen Computer autorisieren - Apeksha Sahu vor 5 Minuten
zweiter Schritt .... Gehen Sie zu den Entwicklern in den Einstellungen in iPad und iPhone und indizieren Sie mit Bezeichnern und eindeutigen Vertrauenscomputern alles neu. Es funktionierte für mich ........ ....... Nach der Neuinstallation von Mac OSHigh seria 10.13.15 von Mac OS seirra beta neueste Version, um Xcode neueste Version nach der Aktualisierung aller Zertifikate neu zu installieren. etc etc etc ... so viele Methoden wie du denkst, habe ich getan. -  enter image description here

1
Apeksha Sahu

Das Gleiche war, als ich ein neues Konfigurations- und Build-Schema erstellt habe.

Die Lösung für mich war also zu laufen 

pod install

für diese neu erstellte Konfiguration.

1
atereshkov

Es ist ein Laufzeitfehler

Der Fehler Library not loaded mit @rpath[Über] zeigt an, dass Xcode das Framework nicht finden kann.

  1. Überprüfen Sie, ob das Framework zu General -> Embedded Binaries hinzugefügt wurde.

  2. Überprüfen Sie, ob der @rpath einen richtigen Pfad in Build Settings -> Runpath Search Paths enthält.

Lesen Sie mehr hier

0
yoAlex5
  1. Gehen Sie zu einer Datei in xcode -> Arbeitsbereich-Einstellungen 
  2. Klicken Sie auf den Pfeil, neben dem angezeigt wird/Benutzer/Apple/Bibliothek/Entwickler/Xcode/DerivedData
  3. Wählen Sie die abgeleiteten Daten aus und verschieben Sie sie in den Papierkorb. 
  4. Beenden Sie den Xcode und öffnen Sie ihn erneut.
  5. Reinigen Sie das Projekt und führen Sie es erneut aus. 

Über die oben genannten Schritte wurden meine Probleme gelöst.

0
john raja

Versuchen Sie das Flag ALWAYS_EMBED_Swift_STANDARD_LIBRARIES (in früheren Xcode-Versionen: Embedded Content Contains Swift Code) in den Build-Einstellungen von NEIN zu JA zu ändern.

0
Vittal Pai