OS X Framework Library nicht geladen: 'Image nicht gefunden'

279

Ich versuche, ein grundlegendes OS X-Framework zu erstellen. Im Moment habe ich nur ein Test-Framework erstellt. TestMacFramework.frameworkIch versuche, es in ein brandneues OS X-Anwendungsprojekt zu importieren.

Ich habe die .framework-Datei erstellt und in das neue Projekt importiert. Das Framework scheint in Ordnung zu sein, und ich kann auf die öffentliche Header-Datei verweisen, die ich dem Abschnitt zu den Framework-Erstellungsphasen hinzugefügt habe.

Wenn ich jedoch versuche, die Containeranwendung auszuführen, wird der folgende Fehler angezeigt:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Nach einigem googeln wurde mir klar, dass ich Copy Filesmeinen Erstellungsphasen für Containeranwendungen einen Abschnitt hinzufügen musste , also habe ich dies getan und es so eingerichtet ...

Geben Sie hier die Bildbeschreibung ein

Ich erhalte jedoch immer noch den Laufzeitfehler. Ich mache hier offensichtlich etwas falsch, aber die Apple-Entwicklerbibliotheksressource für diesen Verweis auf Xcode 2 ist also nicht sehr hilfreich!

Was habe ich vermisst?

AKTUALISIEREN:

Ich kann im Build-Protokoll sehen, dass my TestMacFramework.frameworkin das Verzeichnis .app content / frameworks kopiert wird, aber nicht in das Verzeichnis Library / Frameworks auf der Festplatte installiert wird

Geben Sie hier die Bildbeschreibung ein

UPDATE 2:

Der Build verlinkt korrekt, wenn ich ihn manuell TestMacFramework.frameworkin das Library/FrameworksVerzeichnis kopiere

Sammio2
quelle
1
Was sagt otool -LIhnen, wo die App das Framework erwartet?
Trojanfoe
Okay, ich habe herausgefunden, wie ich es ausführen soll ... Dies ist die Ausgabe, die ich für meine Bibliothek erhalte (ich habe die anderen Abhängigkeiten wie Foundation usw. ausgeschlossen)/Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework (compatibility version 1.0.0, current version 1.0.0)
Sammio2
Mein Fix war das Einbetten der Bibliothek, die ich brauchte (Alamofire), als Binärdateien. Ist das akzeptabel?
Cmag
2
Es ist sehr verwirrend, dass diese Frage eindeutig als für OS X gekennzeichnet ist und alle Antworten, einschließlich der akzeptierten, für iOS gelten. Ich habe den gleichen Fehler und kann keine der Antworten verwenden.
RenniePet
@RenniePet Da Xcode 7.3 für iOS- und MacOS-Frameworks identisch ist, ist die akzeptierte Antwort der richtige Weg, dies zu tun. Wenn Sie immer noch Probleme haben, könnte dies ein nicht verwandtes Problem sein?
Sammio2

Antworten:

552

[Xcode 11+]

Das einzige, was Sie tun müssen, ist, das Framework dem General->Frameworks, Libraries And Embedded ContentAbschnitt auf der GeneralRegisterkarte Ihres App-Ziels hinzuzufügen .

Stellen Sie sicher, dass Sie die Option 'Einbetten & Signieren' auswählen.

Geben Sie hier die Bildbeschreibung ein

[Xcode v6 -> Xcode v10]

Das einzige, was Sie tun müssen, ist, das Framework dem Embedded binariesAbschnitt auf der GeneralRegisterkarte Ihres App-Ziels hinzuzufügen .

Screenshot von Xcode

Kappe
quelle
32
Dies ist der einzige Schritt, der für iOS erforderlich ist.
Nikolovski
7
Vielen Dank! Hat es für mich unter iOS gelöst.
user1244109
6
Danke dir! Es hat mir für iOS geholfen
Alexander Khitev
4
Ich verwende eine Klasse aus meinem importierten Framework in Storyboard und hatte diesen Fehler. Ich wollte nur hinzufügen, dass Sie zusätzlich zum Festlegen der benutzerdefinierten KLASSE im Storyboard auch das Feld MODUL festlegen müssen.
Ruben Martinez Jr.
8
@ZevsVU Ich habe keinen Embedded binariesAbschnitt in meinem MacOS-Projekt. Was ist los mit dir?
fnc12
56

Also habe ich es geschafft, es zum Laufen zu bringen. Es ist ganz einfach, wenn Sie die richtigen Anweisungen haben. Was ich suchte, war ein "privates" Framework, das im App-Bundle gespeichert ist und nicht in den Ordner der Systembibliothek geschrieben wird.

Aufbau des Frameworks

  1. Fügen Sie ein Ziel hinzu, um ein Cocoa Framework zu erstellen
  2. Innerhalb dieser Ziele konfigurieren 'Build Settings' das 'Installation Directory' auf '@executable_path /../ Frameworks'.
  3. Erstellen Sie eine Bibliothek und greifen Sie über das Archiv- oder Produktverzeichnis auf das .framework zu

Einschließlich des Frameworks

  1. Ziehen Sie die erstellte .framework-Datei in das Xcode-Projekt. Aktivieren Sie das Kontrollkästchen "Dateien in Verzeichnis kopieren".
  2. Fügen Sie im Ziel für enthaltende Anwendungen eine neue Phase zum Erstellen von Dateien hinzu.
  3. Setzen Sie das 'Ziel' auf 'Frameworks'
  4. Ziehen Sie das erstellte .framework ein
Sammio2
quelle
1
Dies funktioniert auch für iOS-Frameworks. Wenn Sie das benutzerdefinierte Framework zum Arbeitsbereich hinzufügen, um es zusammen zu erstellen. Sie müssen den Teil Inclusive The Framework dieser Lösung hinzufügen, um diesen Fehler beim Debuggen auf dem Gerät zu beheben!
Cynistersix
1
Danke, hat für iOS gearbeitet. Ich habe Ihre ersten Schritte nicht befolgt, da die Frameworks bereits in meinem abgeleiteten
Datenordner erstellt wurden
Genial! Rettete meinen verdammten Tag! 2017 - Xcode 8.3.2 Danke!
Glenn
Aus irgendeinem Grund können Sie das Framework nicht aus dem Standardabschnitt "Binär mit Bibliotheken verknüpfen" in den Abschnitt "Eingebettete Frameworks" ziehen, aber Sie können das Framework aus der Projektliste links ziehen. Sie müssen das Framework weiterhin manuell aus dem Abschnitt "Binär mit Bibliotheken verknüpfen" mit der Schaltfläche "-" löschen.
William Cerniuk
18

Es war ganz einfach für mich, ich habe gerade mein Framework zu meinen eingebetteten Binärdateien unter App-Zielen hinzugefügt

Robin Delaporte
quelle
15

Die oben genannten Optionen waren für mich nicht möglich. Ich habe es gelöst, indem ich den Runpath-Suchpfad angegeben habe

Dies befindet sich auf der Registerkarte " Build-Einstellungen ". Im Abschnitt " Verknüpfen ". Ändern Sie ' Runpath Search Paths ' in$(inherited) @executable_path/Frameworks

Vincent
quelle
Ich brauchte beide Schritte, diesen Schritt und das Hinzufügen einer neuen 'Copy File Build Phase' mit dem Framework zuvor.
Benutzer23
Ich hatte ein altes Xcode-Projekt, das schrittweise aktualisiert wurde, und diese Einstellungen fehlten mir. Hinzugefügt und funktioniert nun wie erwartet.
Mattio
Von all diesen Lösungen, die diese funktionierten, ist es so ärgerlich, wie die Herangehensweise an das Problem lautet: "Okay, lassen Sie mich die Liste all dieser Stackoverflow-Beiträge durchgehen, da die Grundursache unklar ist." APPLEEEEE
Ryan
9

Ich bin auf dasselbe Problem gestoßen, aber die akzeptierte Lösung hat bei mir nicht funktioniert. Stattdessen bestand die Lösung darin, den Installationsnamen des Frameworks zu ändern.

Der Fehler im ursprünglichen Beitrag ist:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Beachten Sie den ersten Pfad nach Bibliothek nicht geladen . Das Framework wird von einem absoluten Pfad geladen. Dieser Pfad stammt aus dem Installationsnamen des Frameworks (manchmal auch als rpath bezeichnet), der wie folgt überprüft werden kann:

otool -D MyFramework.framework/MyFramework

Wenn ein Framework in eine App eingebettet ist, sollte dieser Pfad relativ sein und die folgende Form haben: @ rpath / MyFramework.framework / MyFramework . Wenn der Installationsname Ihres Frameworks ein absoluter Pfad ist, wird er möglicherweise nicht zur Laufzeit geladen, und es wird ein Fehler ähnlich dem oben genannten erzeugt.

Die Lösung besteht darin, den Installationsnamen zu ändern:

install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework 

Mit dieser Änderung erhalte ich den Fehler nicht mehr

Amos Joshua
quelle
8

Durch das Löschen abgeleiteter Daten wurde es für mich gespeichert

SleepsOnNewspapers
quelle
3
Hat bei mir nicht funktioniert, aber als ich es gemacht habe, hat pod installes funktioniert.
Hola Soja Edu Feliz Navidad
7

Keines dieser Probleme löste dies für mich. Das Problem war am Ende ziemlich einfach. Es sieht so aus, als wäre es ein ziemlich schwerwiegender Xcode-Fehler, den ich unter Apple-Fehler 29820370 protokolliert und behoben habe: Wenn Sie Probleme haben (es scheint, als gäbe es mehrere Seiten mit ähnlichen Problemen), wäre es großartig, wenn Sie können Lösen Sie einen Fehler im Fehlerreporter aus: https://bugreport.apple.com/ und verweisen Sie auf den Fehler, den ich ausgelöst habe, um die Sichtbarkeit zu verbessern. Ich möchte Xcode wieder zu dem Vergnügen machen, das es vorher war - und das ist etwas, von dem ich sicher bin, dass Xcode sich selbst hätte reparieren sollen.

Hier ist die Lösung: 1. Öffnen Sie den Schlüsselbund - gehen Sie zu Apple Worldwide Developer Cert. 2. Doppelklicken Sie darauf. 3. Ändern Sie die Berechtigungsstufe von "Immer vertrauen", um die Systemstandards zu verwenden. 4. Speichern und schließen Sie sie. 5. Starten Sie Xcode neu. Bereinigen und erstellen Sie Ihr Projekt, und es sollte verschwunden sein.

Screenshot unten mit den richtigen Einstellungen: Schlüsselbundzugang behoben Hoffe das hilft!

UKDataGeek
quelle
2
"Systemeinstellungen verwenden" scheint die Standardeinstellung zu sein.
Raphael
Nicht immer - etwas scheint es zu ändern, was zu diesem Fehler führt
UKDataGeek
Danke, das hat auch mein Problem behoben! Leider kann ich Ihr Ticket nicht im Bug-Tracker sehen, um es besser sichtbar zu machen. Ich bin mir nicht sicher warum, es zeigt dort jedoch keine Fehler.
Jim
7

Xcode 11:

Fügen Sie in Xcode 11 das Framework hinzu General->Frameworks, Libraries And Embedded Content

Stellen Sie nach dem Hinzufügen sicher, dass Sie die Embed & SignOption auswählen

Geben Sie hier die Bildbeschreibung ein

Saifan Nadaf
quelle
2
Wenn Sie dies tun, können Sie Ihre App nicht im App Store hochladen
Mahendra
@ Mahendra, was ist die Alternative, die Sie in diesem Fall verwenden? Ich hatte ein ähnliches Problem.
Derryl Thomas
@DerrylThomas, Die App befindet sich noch im Entwicklungsmodus, hat diesen Fall also nicht getestet
Mahendra
1
@ Mahendra, bitte teilen Sie hier, falls Sie eine Alternative dafür finden. Ich wäre sehr dankbar.
Derryl Thomas
@DerrylThomas Stellen Sie beim Erstellen des Archivs die Option "Nicht einbetten" wieder her und erstellen Sie eine ausführbare Datei zum Hochladen in den App Store.
BlackPearl12
6

Wenn Sie ein benutzerdefiniertes Framework unter Xcode 10.1 in ein Projekt ziehen , wird davon ausgegangen , dass es sich bei dem Framework um ein Systemframework handelt, und das Framework wird unter Ihrem Ziel in den Abschnitt "Binär mit Bibliotheken verknüpfen" von "Phasen erstellen" eingefügt.

System-Frameworks befinden sich bereits auf dem Gerät, sodass es nicht auf das Gerät kopiert wird und daher zur Laufzeit nicht ausgeführt werden kann. KABOOM (Absturz in __abort_with_payload und Fehler beim Desinformieren: "Grund: Bild nicht gefunden"). Dies liegt daran, dass der Framework-Code nicht auf das Gerät kopiert wird ...

Damit Xcode sowohl das benutzerdefinierte Framework verknüpft als auch sicherstellt, dass es zusammen mit Ihrem Code auf das iOS-Gerät (Real oder Simulator) kopiert wird, muss das benutzerdefinierte Framework in "Bundle-Ressourcen kopieren" verschoben werden. Dadurch wird das Framework zusammen mit Ihrer ausführbaren Codedatei so verpackt, dass sie zusammen auf dem Gerät verfügbar ist.

So fügen Sie einem Projekt ein benutzerdefiniertes Framework hinzu und vermeiden den Apple-Absturz:

  1. Ziehen Sie ein benutzerdefiniertes Framework in Ihre iOS-Projektdateiliste
  2. Klicken Sie im Navigator auf Projektname -> Zielname -> "Phasen erstellen" -> Offenlegungsdreieck "Binär mit Bibliotheken verknüpfen"
  3. Ziehen individuelle Rahmen und nach unten zu „Copy Bundle Ressourcen“ weiter unten (Xcode jetzt bewegt sich die Bezugsrahmen, fest in Xcode 10)
  4. Im Simulator oder Gerät ausführen

Das benutzerdefinierte Framework wird somit zusammen mit Ihrem Code auf Ihr Zielgerät kopiert und ist zur Laufzeit verfügbar.

Geben Sie hier die Bildbeschreibung ein

[Leitartikel: Sie würden denken, Xcode wäre klug genug, um den Unterschied zwischen einem seiner System-Frameworks, die nicht auf das Gerät kopiert werden müssen, und einem benutzerdefinierten Framework herauszufinden, das sich, oh ich weiß nicht, in der Hierarchie des Projektstammverzeichnisses befindet ... 🙄]

William Cerniuk
quelle
5

Es sollte ein 'Skript ausführen' in 'Phasen erstellen' mit folgendem Inhalt enthalten: '/ usr / local / bin / carthage copy-frameworks'

In den 'Eingabedateien' dieses 'Skript ausführen' sollten Sie den Pfad zu Ihren Bibliotheken hinzufügen. So was:

Build Phases Run Script

Thacilima
quelle
4

Wenn Sie Ihren Schlüsselbund versehentlich zurücksetzen, kann dies an fehlenden Apple-Zertifikaten im Schlüsselbund liegen. Ich folgte diesem , um mein Problem zu lösen.

Ich hatte das gleiche Problem und konnte es beheben, indem ich den WWDR (Apple Worldwide Developer Relations Certification Authority) erneut herunterlud. Hier herunterladen: http://developer.apple.com/certificationauthority/AppleWWDRCA.cer

user1742302
quelle
Dies löste auch mein Problem. Denken Sie daran, den Build-Ordner vor dem erneuten Kompilieren zu bereinigen.
Justin Milo
4

Wenn Sie Xcode 11 verwenden , stellen Sie sicher, dass Sie das Framework unter Framework-Einstellungen, Bibliotheken und Inhalte einbetten unter Zieleinstellungen - Allgemein hinzugefügt haben. Ändern Sie den Einbettungsstatus von "Nicht einbetten" in "Einbetten & Signieren".

Sachin Nautiyal
quelle
Dies führt jedoch zu einem ungültigen Swift Support-Fehler von ITMS-90206, wenn Sie an den App Store verteilen. Es funktioniert nur in der Entwicklung.
Raptor
2

Was es für mich gelöst hat, war der Wechsel abstract_targetzum targetHauptziel in meinem Podfile. Ich hatte es zuvor eingestellt abstract_targetund dies verursachte den beschriebenen Fehler. Jetzt funktioniert es wie ein Zauber

Francesco DM
quelle
1

Bei Xcode 8 werden einige veraltete Produkte aus dem Ordner für abgeleitete Daten entfernt (siehe diese Lösung) .

Apple: In macOS 10.12 und höher bereinigt Xcode veraltete abgeleitete Daten, vorkompilierte Header und Modul-Caches. (23282174)

Das Xcode-Build-System unterstützt das Entfernen veralteter Dateien einiger Arten von Build-Artefakten, die in einem früheren Build erstellt wurden, seitdem jedoch aus dem Projekt entfernt wurden.

Basierend auf den Gedanken des Autors habe ich dieses Build-Protokoll aus meinem Fall gefunden.

Remove stale build products

/bin/rm -rf /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks/AliyunVodPlayerSDK.framework
/bin/rmdir /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks

Nach dem Erstellen einer neuen Kopierdateiphase und dem Kopieren des veralteten Zielframeworks in das Frameworks- Ziel wird das obige Entfernungsprotokoll nach der Neuerstellung ausgeblendet.

Klären Sie einfach meine Situation und meinen Grund und hoffen Sie, dass es für jemanden hilfreich ist.

Itachi
quelle
1

Für mich war dies die Lösung nach vielen Stunden der Suche !!

Aus irgendeinem Grund hatte Xcode 8 bereits in der Entwicklung eines benutzerdefinierten Swift 2.3-Frameworks die DYLIB_INSTALL_NAME_BASEEinstellung aus der project.pbxprojDatei entfernt. Ein kleiner Spaziergang in die Build Settings / Dynamic Library Install Name BaseUmgebung zurück, um @rpathes zu reparieren.

(von https://forums.developer.apple.com/thread/4687 )

kapselt
quelle
0

Ich stellte fest, dass dieses Problem nur mit der Codesignatur und den Zertifikaten zusammenhängt, nicht mit dem Code selbst. Um dies zu überprüfen, erstellen Sie die einfache Einzelansicht-App und versuchen Sie, sie ohne Änderungen an Ihrem Gerät auszuführen. Wenn Sie denselben Fehlertyp sehen, zeigt dies, dass Ihr Code in Ordnung ist. Wie ich werden Sie feststellen, dass Ihre Zertifikate ungültig sind. Laden Sie alles erneut herunter und beheben Sie alle abgelaufenen. Wenn Sie dann die Basis-App erhalten, die den Fehler nicht meldet, versuchen Sie es erneut, nachdem Sie Xcode beendet und Ihren Mac möglicherweise neu gestartet haben. Damit war dieser Albtraum endlich beendet. Dies hat höchstwahrscheinlich nichts mit Ihrem Code zu tun, insbesondere wenn Sie beim Versuch, ihn auszuführen, die Meldung Build Successful erhalten. Zu Ihrer Information

iOS4Fun
quelle
0

Beim Versuch, Xcode 9 Beta zu testen und zu Xcode 8 zurückzukehren, wurde das Problem behoben. Eine einfache Bereinigung des Ziels löste das Problem.

Xavier
quelle
0

Ich hatte das gleiche Problem aus einem anderen Grund. Ich habe eine neue Konfiguration für Debug und Release erstellt (unter PROJEKT -> Registerkarte Info -> Konfiguration). Und ich musste mein Shell-Skript für Pod-Frameworks (Pods- "appName" -frameworks.sh unter Targets Support Files) ändern, damit es funktioniert.

[Xcode 9]

Yuval
quelle
0

Das einzige was bei mir funktioniert hat:

Ziel> Build-Phasen> [CP] Pods-Frameworks einbetten Deaktivieren Sie "Umgebungsvariablen im Build-Protokoll anzeigen" und "Skript nur bei Installation ausführen".

Neil
quelle
0

Ich habe viele Korrekturen versucht, aber was für mich funktioniert hat, war das Löschen eines fehlenden Ziels, das auf der Registerkarte "Erstellen" des Erstellungsschemas aufgeführt ist. Sie können darauf zugreifen, indem Sie das Bearbeitungsfenster des aktuellen Schemas öffnen.

Bearbeiten: Mein UI-Testziel funktionierte nicht so gut. Die Lösung bestand darin, es zu löschen und erneut zu generieren.

Gonzalo
quelle
0

Öffnen Sie xcode -> general -> Embedded Binaries -> fügen Sie QBImagepicker.framework und RSKImageCropper hinzu -> clean project

Fügen Sie einfach QBImagePicker.framework und RSKImageCropper.framework bei eingebetteten Binärdateien hinzu, die für mich funktioniert haben

Agustiar
quelle
0

Ich denke, es gibt keinen festen Weg, um dieses Problem zu lösen, da es aus verschiedenen Gründen verursacht werden könnte. Ich hatte dieses Problem auch letzte Woche, ich weiß nicht, wann und was genau dieses Problem verursacht, nur wenn ich es auf einem Simulator mit Xcode ausführe oder versuche, es auf dem Telefon zu installieren, dann meldet es einen solchen Fehler, aber wenn ich Führen Sie es mit reaktionsnativen Run-Ios mit Terminal aus, es gibt kein Problem.

Ich habe alle im Internet veröffentlichten Methoden überprüft, z. B. Zertifikat erneuern, Einstellungen in Xcode ändern (alle oben genannten Möglichkeiten). Tatsächlich wurden alle Einstellungen in Xcode bereits wie zuvor angefordert festgelegt. Keine der Möglichkeiten funktioniert für mich. Bis heute Morgen, wenn ich die Pods lösche und neu installiere, wird der Fehler nach einer Woche endlich auftreten. Wenn Sie auch Cocoapod verwenden und dann ein Fehler ohne bestimmten Grund angezeigt wurde, können Sie vielleicht meinen Weg versuchen.

  1. Überprüfen Sie meine Cocoapods-Version.
  2. Aktualisieren Sie es, wenn eine neue Version verfügbar ist.
  3. Gehen Sie zu Ihrem Projektordner, löschen Sie Ihre Podfile.lock, Pods-Datei, Projekt xcworkspace.
  4. Führen Sie die Pod-Installation aus
Jack
quelle
0

Ich habe dieses Problem nur beim Ausführen auf einem realen Gerät (iPhone SE) festgestellt. Am Simulator arbeitete das Projekt wie erwartet.

Ich habe alle Korrekturen von diesem Thread und von hier aus versucht . Keiner von denen hat für mich gearbeitet.

Für mich wurde das Problem nach dem Neustart des iPhone gelöst (sic!).

Ich tat:

  • sauberer Build-Ordner,
  • saubere abgeleitete Daten,
  • App vom Gerät löschen,
  • Gerät neustarten

Und es funktioniert endlich. :) :)

Wenn jede andere Lösung fehlschlägt, vergessen Sie nicht, sie auszuprobieren.

Vandermesis
quelle
0

Xcode 11: Phasen erstellen -> Frameworks einbetten

Geben Sie hier die Bildbeschreibung ein

Ofir Malachi
quelle