wake-up-neo.com

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

Ich versuche, ein grundlegendes OS X-Framework zu erstellen. Ich habe gerade ein Test-Framework erstellt: TestMacFramework.framework und ich 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 einen Link zu bilden, und ich kann auf die öffentliche Header-Datei verweisen, die ich dem Abschnitt zum Erstellen des Frameworks hinzugefügt habe.

Wenn ich jedoch versuche, die Containeranwendung auszuführen, erhalte ich den folgenden Fehler:

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

Nachdem ich ein bisschen gegoogelt hatte, wurde mir klar, dass ich einen Copy Files-Abschnitt zu den Buildphasen für die Containeranwendung hinzufügen musste, also habe ich dies getan und es so eingerichtet ...

enter image description here

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

Was habe ich vermisst?

UPDATE:

Im Build-Protokoll kann ich sehen, dass mein TestMacFramework.framework in das Verzeichnis .app contents/frameworks kopiert wird, aber nicht in das Library/Frameworks-Verzeichnis auf der Festplatte installiert wird

enter image description here

UPDATE 2:

Der Build-Link ist korrekt, wenn Sie den TestMacFramework.framework manuell in das Library/Frameworks-Verzeichnis kopieren

210
Sammio2

[aus Xcode 6 -> 7.3]

(Ja, arbeitet immer noch an Xcode 10, iOS und macOS)

Das einzige, was Sie tun müssen, ist das Framework zum Abschnitt Embedded binaries auf der Registerkarte General Ihres App-Ziels hinzuzufügen.

Screenshot from Xcode

450
Kappe

Ich habe es geschafft, es zum Laufen zu bringen. Es ist ziemlich einfach, wenn Sie die richtigen Anweisungen haben. Was ich suchte, war ein "privates" Framework, das im App-Bundle lebt und nicht in den Systembibliotheksordner geschrieben wird.

Den Rahmen aufbauen

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

Einschließlich des Rahmens

  1. Ziehen Sie die erstellte .framework-Datei in das Xcode-Projekt. Aktivieren Sie "Dateien in Verzeichnis kopieren".
  2. Fügen Sie im übergeordneten Anwendungsziel eine neue 'Copy File Build Phase' hinzu.
  3. Setzen Sie das 'Ziel' auf 'Frameworks'
  4. Ziehen Sie in das erstellte Framework
50
Sammio2

Es war ziemlich einfach für mich, ich habe gerade mein Embedded Binaries unter App-Zielen hinzugefügt 

18
Robin Delaporte

Die obigen Optionen waren für mich nicht möglich. Ich konnte das Problem lösen, indem ich den Runpath-Suchpfad angab

Dies ist auf der Registerkarte ' Build Settings ' . Im Abschnitt ' Linking ' . Ändern Sie ' Runpath-Suchpfade ' in $(inherited) @executable_path/Frameworks.

13
Vincent

Keines dieser Probleme hat das für mich gelöst. Das Problem war am Ende ziemlich einfach. Es sieht so aus, als wäre es ein ziemlich großer Xcode-Fehler, den ich unter Apple-Fehler protokolliert und behoben habe: 29820370. Wenn Sie Probleme haben (es scheint, dass es mehrere Seiten mit ähnlichen Problemen gibt), wäre es toll, wenn Sie können einen Fehler in Bug Reporter melden: https://bugreport.Apple.com/ und verweisen auf den Fehler, den ich angesprochen habe, um Sichtbarkeit zu erlangen. Ich möchte Xcode wieder in das Vergnügen verwandeln, das es vorher war - und das ist etwas, was ich mir sicher sein sollte. 

Hier ist der Fix: 1. Schlüsselbund öffnen - gehen Sie zu Apple Worldwide Developer Cert. 2. Doppelklicken Sie darauf 3. Ändern Sie die Berechtigungsstufe von "Always trust", um System Defaults .__ zu verwenden. 4. Speichern und schließen Sie es 5. Starten Sie Xcode neu, bereinigen Sie Ihr Projekt, und es sollte weg sein. 

Screenshot unten der korrekten Einstellungen:  Keychain access fixed Hoffe das hilft! 

7
Mobile Bloke

Das Löschen abgeleiteter Daten hat es für mich gespeichert

6

Ich bin auf das gleiche Problem gestoßen, aber die akzeptierte Lösung hat für mich nicht funktioniert. Stattdessen bestand die Lösung darin, den Installationsnamen des Frameworks zu ändern.

Der Fehler im ursprünglichen Beitrag lautet:

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 vom Installationsnamen des Frameworks (manchmal als rpath bezeichnet), der mit folgendem Befehl untersucht werden kann:

otool -D MyFramework.framework/MyFramework

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

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

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

Mit dieser Änderung bekomme ich den Fehler nicht mehr

5
Amos Joshua

Wenn Sie ein benutzerdefiniertes Framework unter Xcode 10.1 in ein Projekt ziehen, gehtdavon aus, dassdas Framework ein Systemframework ist, und Fügt das Framework in den Abschnitt "Link Binary With Libraries" unter "Build Phases" unter Ihrem Ziel ein.

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

In der Realität muss das benutzerdefinierte Framework auf "Copy Bundle Resources" verschoben werden, damit Xcode das benutzerdefinierte Framework verbindet und sicherstellt, dass es zusammen mit Ihrem Code auf das iOS-Gerät (Real oder Simulator) kopiert wird. Dadurch wird das Framework zusammen mit Ihrem ausführbaren Code so verpackt, dass es 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 das benutzerdefinierte Framework in die Dateiliste Ihres iOS-Projekts
  2. Klicken Sie im Navigator auf ProjectName -> TargetName -> "Build Phases" -> Link Binary With Libraries Disclosure Triangle
  3. Ziehen Sie das benutzerdefinierte Framework in den Abschnitt "Bundle-Ressourcen kopieren" (Xcode nowmovesdie in Xcode 10 festgelegte Framework-Referenz).
  4. Führen Sie den Simulator oder das Gerät aus

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

enter image description here

[editorial: du wärstdenkstXcode wäre schlau genug, um den Unterschied zwischen einem seiner System-Frameworks, die nicht auf das Gerät kopiert werden müssen, und einem benutzerdefinierten Framework herauszufinden. Weiß nicht, in der Projektstammverzeichnis-Hierarchie ... ????]

4
William Cerniuk

Wenn Sie versehentlich Ihren Schlüsselbund zurücksetzen, kann dies an fehlenden Apple Zertifikaten im Schlüsselbund liegen. Ich habe this gefolgt, 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. Laden Sie es hier herunter: http: //developer.Apple.com/certificationauthority/AppleWWDRCA.cer

4
user1742302

Es sollte ein 'Run Script' in 'Build Phases' 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

3
thacilima

Bei Xcode 8 werden einige veraltete Produkte aus abgeleiteten Datenordnern entfernt. Siehe diese Lösung .

Apple: In MacOS 10.12 und höher bereinigt Xcode veraltete abgeleitete Daten, vorkompilierte Header und Modulcaches. (23282174)

Das Xcode-Buildsystem unterstützt das Entfernen veralteter Dateien einiger Typen von Build-Artefakten, die in einem vorherigen Build erstellt wurden, seitdem jedoch aus dem Projekt entfernt wurden.

Basierend auf dem Gedanken des Autors fand ich dieses Build-Protokoll aus meinem Fall.

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

Nachdem Sie eine neue Kopierdateiphase erstellt und das Ziel veraltet Framework an Frameworks Ziel kopiert haben, wird das obige Entfernungsprotokoll nach der Neuerstellung nicht mehr angezeigt. 

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

1
Itachi

Für mich war dies die Lösung, nach vielen Stunden des Suchens !!

Aus irgendeinem Grund hatte Xcode 8 die DYLIB_INSTALL_NAME_BASE-Einstellung aus der project.pbxproj-Datei entfernt. Ein kleiner Schritt in die Build Settings / Dynamic Library Install Name Base-Einstellung zurück zu @rpath hat es behoben.

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

1
encaps

Ich habe viele Korrekturen ausprobiert, aber für mich funktionierte es, ein fehlendes Ziel zu löschen, das auf der Build-Registerkarte des Build-Schemas aufgeführt ist. Sie können es erreichen, indem Sie das Bearbeitungsfenster des aktuellen Schemas öffnen.

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

0
Gonzalo

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 das Pod-Framework ändern Pods- "appName" -frameworks.sh (unter Unterstützungsdateien für Ziele)), damit es funktioniert.

[Xcode 9]

0
Yuval

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

0
Sachin Nautiyal

Ich denke, es gibt keinen festen Weg, um dieses Problem zu lösen, da es aus verschiedenen Gründen auftreten kann. Ich hatte auch dieses Problem letzte Woche, ich weiß nicht wann und was genau dieses Problem verursacht, nur wenn ich es auf einem Simulator mit Xcode starte oder versuche, es auf dem Telefon zu installieren, dann meldet es eine solche Art von Fehler, aber wenn ich Führe es mit react-native 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 Methoden). Tatsächlich wurden alle Einstellungen in Xcode bereits so festgelegt, wie sie zuvor angefordert wurden. Keine der Methoden funktioniert für mich. Bis heute morgen, wenn ich die Pods lösche und neu installiere, wird der Fehler nach einer Woche behoben sein. Wenn Sie auch Cocoapod verwenden und der Fehler nur ohne bestimmten Grund angezeigt wurde, können Sie 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
0
Jack

Ich habe festgestellt, dass dieses Problem nur mit der Codesignierung und den Zertifikaten und nicht mit dem Code selbst zusammenhängt. Um dies zu überprüfen, erstellen Sie die grundlegende Einzelansicht-App und versuchen Sie, sie ohne Änderungen an Ihrem Gerät auszuführen. Wenn Sie den gleichen Fehlertyp sehen, zeigt dies, dass Ihr Code einwandfrei ist. Wie ich werden Sie feststellen, dass Ihre Zertifikate ungültig sind. Laden Sie alle erneut herunter und korrigieren Sie alle abgelaufenen. Wenn Sie die Basis-App erhalten, um den Fehler nicht zu melden, versuchen Sie Ihre App erneut, nachdem Sie Xcode beendet haben und möglicherweise einen Neustart Ihres Mac für ein gutes Maß vorgenommen haben. Damit war dieser Albtraum endlich beendet. Dies hat höchstwahrscheinlich nichts mit Ihrem Code zu tun, insbesondere wenn Sie die Build Buildful-Meldung erhalten, wenn Sie versuchen, es auszuführen. Zu Ihrer Information

0
iOS4Fun

Was für mich gelöst wurde, war abstract_target in target für das Hauptziel in meiner Poddatei zu ändern. Ich hatte es zuvor auf abstract_target eingestellt und dies führte zu dem beschriebenen Fehler. Jetzt funktioniert es wie ein Zauber

0
Francesco D.M.

Das Problem wurde behoben, als Xcode 9 Beta getestet wurde und zu Xcode 8 zurückgekehrt wurde. Eine einfache Bereinigung des Ziels hat das Problem behoben.

0
Xavier

open xcode -> general -> Embedded Binaries -> Füge QBImagepicker.framework und RSKImageCropper -> clean project hinzu

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

0
Agustiar

Das einzige, was für mich funktioniert hat:

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

0
Neil