673 Stimmen

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

Dieser Absturz war ein blockierendes Problem. Ich habe die folgenden Schritte zur Reproduktion des Problems verwendet:

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

Die App stürzte sofort beim Start ab. Hier ist der Konsolen-Log:

dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
  Referenziert von: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
  Grund: Bild nicht gefunden

Ich habe versucht, auf iOS 7.1 und 8.0 Geräten zu bauen. Sie haben beide den gleichen Absturz. Allerdings kann ich eine App erstellen und auf dem Simulator ausführen. Außerdem bin ich mir bewusst, dass ich das Framework von Erforderlich auf Optional in Link Binary With Libraries ändern kann, aber das hat das Problem nicht vollständig gelöst. Die App stürzt ab, wenn ich eine Instanz von Dog erstelle. Das Verhalten ist auf dem Gerät und dem Simulator unterschiedlich. Ich vermute, dass wir kein Framework für das Gerät mit einer Beta-Version von Xcode verteilen können. Kann jemand Licht ins Dunkel bringen?

1080voto

vladof81 Punkte 25083

Im Allgemein -Tab des Ziels gibt es ein Eingebettete Binaries Feld. Wenn Sie das Framework dort hinzufügen, wird der Absturz behoben.

Referenz finden Sie hier in den Apple Developer Foren.

273voto

Dawson Punkte 4311

Für iOS größer oder gleich 8

Unter dem Register "Allgemein" des Ziels fügen Sie im Abschnitt "Eingebettete Binärdateien" das Framework hinzu. Dadurch wird das Framework in das kompilierte Ziel kopiert, sodass es zur Laufzeit verlinkt werden kann.

Bildbeschreibung hier eingeben

Warum passiert das?: Weil das von Ihnen verlinkte Framework als dynamisch verlinktes Framework kompiliert ist und daher zur Laufzeit verlinkt wird.

** Hinweis:** Das Einbetten von benutzerdefinierten Frameworks wird nur in iOS > 8 unterstützt, daher folgt eine alternative Lösung, die für ältere iOS-Versionen funktioniert.

Für iOS kleiner als 8

Wenn Sie dieses Framework beeinflussen (Zugriff auf den Quellcode/bauvorgang haben), können Sie dieses Framework möglicherweise so ändern, dass es statisch anstatt dynamisch verlinkt wird. Dadurch wird der Code in Ihrer kompilierten App enthalten sein, anstatt zur Laufzeit verlinkt zu werden, und das Framework muss daher nicht eingebettet werden.

** Wie:** Ändern Sie unter dem Register "Build-Einstellungen" des Frameworks im Abschnitt "Verlinkung" den Mach-O-Typ in Statische Bibliothek. Sie sollten das Framework jetzt nicht mehr unter den eingebetteten Binärdateien benötigen.

Statisches Framework

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

147voto

Brandon A Punkte 7779

Einfach das Framework in Ihr Projekt zu ziehen, reicht nicht aus. Das ist, als ob man im selben Ballpark wäre, aber seine Kinder nicht finden könnte. Befolgen Sie diese Schritte:

1) Erstellen Sie Ihr Framework

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

Bildbeschreibung hier eingeben

2) Greifen Sie auf Ihr Framework zu

  • Nachdem Ihr Framework-Projekt erfolgreich erstellt wurde, ist es bereit, dass Sie in Ihrem Projekt in Ihrem Products-Ordner darauf zugreifen können.

Bildbeschreibung hier eingeben

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

Bildbeschreibung hier eingeben

3) Platzieren Sie das Framework in Ihr Projekt

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

Bildbeschreibung hier eingeben

4) Konfigurieren Sie das App-Projekt für das Framework

  • Wählen Sie das oberste Level in Ihrem Projekt

Bildbeschreibung hier eingeben

  • Wählen Sie Ihr Ziel

Bildbeschreibung hier eingeben

  • Gehen Sie zu "Build Phases", dann "Link Binary with Libraries" und stellen Sie sicher, dass Ihr Framework mit optional ausgewählt enthalten ist.

Bildbeschreibung hier eingeben

  • Weiterhin in "Build Phases", gehen Sie nach oben links und wählen Sie die +-Schaltfläche. Wählen Sie im Dropdown-Menü "Neue Kopiervorgängephase".

Bildbeschreibung hier eingeben

  • Scrollen Sie nach unten in den neuen "Kopieren"-Abschnitt und stellen Sie sicher, dass Sie Ziel auf "Frameworks" setzen. Lassen Sie den Unterverzeichnis leer. Klicken Sie dann auf die Schaltfläche + unten links.

Bildbeschreibung hier eingeben

  • Ihnen wird Ihre Projektstruktur angezeigt. Scrollen Sie zum "Frameworks"-Ordner, in den 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".

Bildbeschreibung hier eingeben

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

Bildbeschreibung hier eingeben

5) Reinigen Sie, dann führen Sie Ihr Projekt aus

  • COMMAND+SHIFT+K
  • COMMAND+R

53voto

Desert Rose Punkte 3296

Zuerst versuchen Sie, nach Command+Option+Shift+K zu bauen. Wenn das immer noch fehlschlägt, führen Sie die folgenden Schritte aus.

Wenn jemand diesen Fehler in Xcode 8 hat, ändern Sie den Status des Frameworks unter dem Allgemein-Tab Ihres Ziels von Erforderlich auf Optional

Geben Sie hier die Bildbeschreibung ein

50voto

NeverHopeless Punkte 10831

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

Schau dir diesen Screenshot an:

Bildbeschreibung hier eingeben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X