OS X Framework Library non chargé: ‘Image not found’

J’essaie de créer un framework OS X de base, je viens juste de créer un framework de test: TestMacFramework.framework et j’essaie de l’importer dans un tout nouveau projet d’application OS X.

J’ai construit le fichier .framework et je l’ai importé dans le nouveau projet. Le framework semble lié correctement et je peux référencer le fichier d’en-tête public que j’ai ajouté à la section des phases de construction du framework.

Cependant, lorsque j’essaie d’exécuter l’application conteneur, j’obtiens l’erreur suivante:

 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 

Après un peu de recherche sur Google, je me suis rendu compte que je devais append une section Copy Files à la phase de construction de mon application de conteneur. Je l’ai donc fait et je l’ai configurée comme suit …

entrer la description de l'image ici

Cependant, je reçois toujours l’erreur d’exécution. Je fais évidemment quelque chose de mal ici, mais la ressource de la bibliothèque de développeurs Apple pour cette référence fait référence à Xcode 2, donc ce n’est pas très utile!

Qu’est-ce que j’ai raté?

METTRE À JOUR:

Je peux voir dans le journal de compilation que mon TestMacFramework.framework est copié dans le répertoire .app content / frameworks, mais il n’est pas installé dans le répertoire Library / Frameworks sur le TestMacFramework.framework

entrer la description de l'image ici

MISE À JOUR 2:

Le build est correctement lié si je copie manuellement le TestMacFramework.framework dans le répertoire Library/Frameworks

[de Xcode 6 -> 7.3]

(oui, toujours en train de travailler sur Xcode 9)

La seule chose à faire est d’append le framework à la section “Binaires intégrés” dans l’onglet “Général” de votre cible d’application.

entrer la description de l'image ici

J’ai donc réussi à le faire fonctionner, c’est assez simple lorsque vous avez les bonnes instructions. Ce que je cherchais, c’était un framework «privé» qui réside dans le lot d’applications au lieu d’être écrit dans le dossier de la bibliothèque système.

Construire le cadre

  1. Ajouter une cible pour créer un framework Cocoa
  2. Dans cette cible, “Paramètres de construction” configure le “Répertoire d’installation” sur “@executable_path /../ Frameworks”
  3. Construire une bibliothèque et accéder à .framework à partir du répertoire des archives ou des produits

Y compris le cadre

  1. Faites glisser le fichier .framework créé dans le projet Xcode, veillez à cocher “Copier les fichiers dans le répertoire”
  2. Dans la cible contenant les applications, ajoutez une nouvelle «Phase de construction du fichier de copie»
  3. Définissez la «Destination» sur «Frameworks»
  4. Faites glisser dans le .framework créé

C’était assez simple pour moi, je viens d’append mon framework à mes binarys embarqués sous les cibles d’application

Les options ci-dessus ne sont pas possibles pour moi. Je l’ai résolu en spécifiant le chemin de recherche Runpath

Ceci est sur l’onglet ‘ Build Settings ‘. Dans la section ‘ Linking ‘. Modifier ” Chemins de recherche de chemin d’access ” dans $(inherited) @executable_path/Frameworks

Aucun de ces problèmes n’a résolu ce problème pour moi. Le problème à la fin était assez facile. Il semble que ce soit un bogue Xcode assez important pour lequel j’ai consigné le problème et corrigé sous le bogue Apple: 29820370. Si vous avez des difficultés (car il semble y avoir plusieurs pages de problèmes similaires), ce serait bien si vous pouviez soulevez un bogue sur le reporter de bogue: https://bugreport.apple.com/ et faites référence au bogue que j’ai soulevé pour gagner en visibilité. Je veux que Xcode revienne au plaisir qui était le sien – et je suis sûr que Xcode aurait dû se corriger.

Voici le correctif: 1. Ouvrez le trousseau – accédez à Apple Worldwide Developer Cert. 2. Double-cliquez dessus 3. Modifiez le niveau de permission de “toujours confiance” pour utiliser les valeurs par défaut du système 4. Enregistrez et fermez-le 5. Redémarrez Xcode, nettoyez et créez votre projet et il devrait disparaître.

Capture d’écran ci-dessous des parameters corrects: Accès au trousseau fixe J’espère que cela t’aides!

La suppression des données dérivées l’a sauvé pour moi

J’ai rencontré le même problème mais la solution acceptée ne fonctionnait pas pour moi. Au lieu de cela, la solution consistait à modifier le nom d’installation du framework.

L’erreur dans le message d’origine est la suivante:

 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 

Notez le premier chemin après la bibliothèque non chargée . Le framework est chargé depuis un chemin absolu. Ce chemin provient du nom d’installation du framework (parfois appelé rpath), qui peut être examiné en utilisant:

 otool -D MyFramework.framework/MyFramework 

Lorsqu’un framework est incorporé dans une application, ce chemin doit être relatif et de cette forme: @ rpath / MyFramework.framework / MyFramework . Si le nom d’installation de votre framework est un chemin absolu, il se peut qu’il ne soit pas chargé à l’exécution et qu’une erreur similaire à celle ci-dessus soit générée.

La solution consiste à modifier le nom d’installation:

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

Avec ce changement je n’ai plus l’erreur

Si vous réinitialisez accidentellement votre trousseau, cela peut être dû à l’absence de certificates Apple dans le trousseau. J’ai suivi ceci pour résoudre mon problème.

J’ai eu le même problème et j’ai pu réparer en téléchargeant à nouveau le WWDR (Apple Worldwide Developer Relations Certification Authority). Télécharger ici: http://developer.apple.com/certificateionauthority/AppleWWDRCA.cer

Il devrait y avoir un “script d’exécution” dans les “phases de construction” avec ceci: “/ usr / local / bin / carthage frameworks”

Sur les fichiers d’entrée de ce script d’exécution, vous devez append le chemin d’access à vos bibliothèques. Comme ça:

Créer un script

Pour Xcode 8, certains produits obsolètes seront supprimés du dossier de données dérivé, en référence à cette solution .

Apple: Dans MacOS 10.12 et versions ultérieures, Xcode nettoie les données dérivées obsolètes, les en-têtes précompilés et les caches de module. (23282174)

Le système de génération Xcode prend en charge la suppression des fichiers obsolètes de certains types d’artefacts de génération produits dans une version précédente, mais qui ont depuis été supprimés du projet.

Basé sur la pensée de l’auteur, j’ai trouvé ce journal de construction de mon cas.

 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 

Après avoir créé une phase de copie et copié la structure obsolète cible vers la destination Frameworks , le journal de suppression ci-dessus disparaît après la reconstruction.

Juste clarifier ma situation et la raison, j’espère que c’est utile pour quelqu’un.

Pour moi, c’était la solution, après plusieurs heures de recherche !!

Pour une raison quelconque, bien dans le développement d’un framework personnalisé Swift 2.3, Xcode 8 avait supprimé le paramètre DYLIB_INSTALL_NAME_BASE du fichier project.pbxproj . Une petite promenade dans le Build Settings / Dynamic Library Install Name Base à @rpath résolu le @rpath .

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

J’ai constaté que ce problème était uniquement lié à la signature du code et aux certificates, pas au code lui-même. Pour le vérifier, créez l’application de vue unique de base et essayez de l’exécuter sans modifier votre appareil. Si vous voyez le même type d’erreur, cela indique que votre code est correct. Comme moi, vous constaterez que vos certificates ne sont pas valides. Télécharger tout et corriger les expirés. Ensuite, lorsque vous obtenez l’application de base pour ne pas signaler l’erreur, essayez à nouveau votre application après avoir quitté Xcode et peut-être redémarré votre mac pour faire bonne mesure. Cela a finalement mis fin à ce cauchemar. Très probablement, cela n’a rien à voir avec votre code, en particulier si vous obtenez un message Build Successful lorsque vous essayez de l’exécuter. FYI

Vous avez le problème en essayant Xcode 9 bêta et en revenant à Xcode 8. Un simple nettoyage sur la cible a résolu le problème.

J’ai eu le même problème pour une raison différente. J’ai créé une nouvelle configuration pour déboguer et libérer (sous PROJET -> onglet Info -> Configuration). Et j’ai dû changer le script shell de mon framework pod (Pods- “appName” -frameworks.sh, sous Targets Support Files) pour le faire fonctionner.

[Xcode 9]

La seule chose qui a fonctionné pour moi:

Cible> Phases de construction> [CP] Encapsulage de pods intégrés Décochez la case “Afficher les variables d’environnement dans le journal de build” et “Exécuter le script uniquement lors de l’installation”

J’ai essayé de nombreux correctifs, mais ce qui a fonctionné pour moi a été de supprimer une cible manquante répertoriée dans l’onglet build du schéma de build. Vous pouvez y accéder en ouvrant la fenêtre d’édition du schéma actuel.

Edit: Ma cible de test de l’interface utilisateur ne fonctionnait pas aussi bien et la solution que j’ai trouvée consistait à la supprimer et à la générer à nouveau.

open xcode -> general -> Binaires incorporés -> append QBImagepicker.framework et RSKImageCropper -> nettoyer le projet

il suffit d’append QBImagePicker.framework et RSKImageCropper.framework à des binarys intégrés pour moi