web-dev-qa-db-fra.com

La bibliothèque d'infrastructure OS X n'est pas chargée: 'Image non trouvée'

J'essaie de créer un framework OS X de base. Pour le moment, je viens 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 l'ai importé dans le nouveau projet. Le cadre semble bien être lié, et je peux faire référence au fichier d'en-tête public que j'ai ajouté à la section des phases de construction du cadre.

Cependant, lorsque j'essaie d'exécuter l'application conteneur, l'erreur suivante apparaît:

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 ajouter une section Copy Files aux phases de construction de mon application conteneur. Je l'ai donc fait et l'ai configuré comme suit ...

enter image description here

Cependant, je reçois toujours l'erreur d'exécution. Évidemment, je fais 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 manqué?

METTRE À JOUR:

Je vois dans le journal de construction que mon TestMacFramework.framework est en cours de copie dans le répertoire .app content/frameworks, mais il n'est pas installé dans le répertoire Library/Frameworks du disque dur.

enter image description here

MISE À JOUR 2:

La construction est correctement reliée si je copie manuellement le TestMacFramework.framework dans le répertoire Library/Frameworks

210
Sammio2

[de Xcode 6 -> 7.3]

(Oui, je travaille toujours sur Xcode 10, iOS et macOS)

La seule chose à faire est d'ajouter le cadre à la section Embedded binaries de l'onglet General de votre cible d'application.

Screenshot from Xcode

450
Kappe

Alors j'ai réussi à le faire fonctionner, c'est assez simple quand on a les bonnes instructions. Ce que je recherchais, c’était un framework «privé» qui réside dans le bundle App 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 ces cibles, "Paramètres de construction" configurez le "Répertoire d'installation" sur "@ chemin_executable /../ Frameworks".
  3. Créez une bibliothèque et accédez au .framework à partir du répertoire archive ou products.

Y compris le cadre

  1. Faites glisser le fichier .framework créé dans le projet Xcode, cochez la case "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éé
50
Sammio2

C'était assez simple pour moi, je viens d'ajouter mon framework à mes binaires incorporés sous des cibles app 

18
Robin Delaporte

Les options ci-dessus où il m'est impossible d'inclure ..__ Je l'ai résolu en spécifiant le chemin de recherche Runpath

Ceci est sur l'onglet ' Paramètres de construction ' . Dans la section ' Liaison ' . Modifier ' Chemin de recherche de chemins de cheminement ' dans $(inherited) @executable_path/Frameworks

13
Vincent

Aucune de ces questions n'a résolu ce problème pour moi. Le problème à la fin était assez facile. Il semble que ce soit un très gros bogue Xcode auquel j’ai consigné le problème et que j’ai corrigé sous le bogue Apple: 29820370. Si vous avez des problèmes soulève un bogue sur le rapport de bogue: https://bugreport.Apple.com/ et fais référence au bogue que j'ai soulevé pour gagner de la visibilité. Je veux que Xcode redevienne le plaisir qu’il était auparavant - et c’est quelque chose que je suis sûr que Xcode aurait dû résoudre lui-même. 

Voici le correctif: 1. Ouvrir le trousseau - accédez à Apple Worldwide Developer Cert. 2. Double-cliquez dessus 3. Modifiez le niveau d'autorisation de "toujours faire confiance" pour utiliser les valeurs par défaut du système 4. Enregistrez et fermez-le 5. Redémarrez Xcode, nettoyez et construisez votre projet et il devrait être parti. 

Capture d'écran ci-dessous des paramètres corrects:  Keychain access fixed J'espère que cela t'aides! 

7
Mobile Bloke

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

6
SleepsOnNewspapers

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:

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 Bibliothèque non chargée . La structure est en cours de chargement à partir d'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 intégré à une application, ce chemin doit être relatif et prendre la forme suivante: @ rpath/MyFramework.framework/MyFramework . Si le nom d'installation de votre infrastructure est un chemin absolu, il risque de ne pas être chargé au moment de l'exécution et une erreur similaire à celle ci-dessus sera générée. 

La solution consiste à modifier le nom de l'installation:

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

Avec ce changement je ne reçois plus l'erreur

5
Amos Joshua

Lorsque vous faites glisser un cadre personnalisé dans un projet sous Xcode 10.1 , il suppose que le cadre est un cadre système et place le cadre dans la section "Lier des fichiers binaires avec des bibliothèques" de "Phases de construction". "sous votre cible.

Les structures système sont déjà présentes sur le périphérique. Par conséquent, il n'est pas copié sur le périphérique et ne peut donc pas être exécuté à l'exécution, donc KABOOM (blocage dans __abort_with_payload et erreur de désinformation: "Raison: image introuvable"). En effet, le code de framework n'est pas copié sur le périphérique ...

En réalité, pour que Xcode lie le framework personnalisé et veille à ce qu'il soit copié avec votre code sur le périphérique iOS (réel ou simulateur), le framework personnalisé doit être déplacé vers "Copier les ressources du bundle". En fin de compte, le package ainsi que l’exécutable du code sont disponibles sur le périphérique.

Pour ajouter un framework personnalisé à un projet et éviter le crash Apple:

  1. Faites glisser la structure personnalisée dans votre liste de fichiers de projet iOS
  2. Cliquez sur Nom du projet dans le navigateur -> NomCible -> "Générer des phases" -> Triangle de divulgation du lien binaire avec les bibliothèques
  3. Faites glisser la structure personnalisée vers le bas et dans la section "Copier les ressources de l'ensemble" ci-dessous (Xcode now déplace la référence de la structure, corrigée dans Xcode 10).
  4. Exécuter en simulateur ou appareil

La structure personnalisée est ainsi copiée avec votre code sur votre périphérique cible et est disponible au moment de l'exécution.

 enter image description here 

[éditorial: vous voudriez réfléchir Xcode serait assez intelligent pour comprendre la différence entre l’un de ses cadres système qui n’a pas besoin d’être copié sur le périphérique et un cadre personnalisé qui est, oh, je ne sais pas, dans la hiérarchie du répertoire racine du projet ... ????]

4
William Cerniuk

Il devrait y avoir un 'script d'exécution' dans 'phases de construction' avec ceci: '/ usr/local/bin/carthage copy-frameworks'

Sur les "Fichiers d'entrée" de ce "Script d'exécution", vous devez ajouter le chemin d'accès à vos bibliothèques. Comme ça:

Build Phases Run Script

3
thacilima

Si vous réinitialisez accidentellement votre trousseau, cela peut être dû à l'absence de certificats 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ésoudre le problème en re-téléchargeant le WWDR (Autorité de certification des relations de développeurs Apple Worldwide) . Téléchargez à partir d'ici: http://developer.Apple.com/certificationauthority/AppleWWDDRCA.cer

3
user1742302

Pour Xcode 8, certains produits périmés seront supprimés du dossier de données dérivées, reportez-vous à 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 modules. (23282174)

Le système de construction Xcode prend en charge la suppression des fichiers périmés de certains types d'artefacts de génération produits dans une version précédente, mais ayant depuis été supprimés du projet.

Basé sur la pensée de l'auteur, j'ai trouvé ce journal de construction provenant 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 nouvelle phase de copie du fichier et copié la structure obsolète cible dans la cible Frameworks, le journal de suppression ci-dessus disparaît après la reconstruction. 

Juste clarifier ma situation et la raison, espérons que cela est utile pour quelqu'un.

1
Itachi

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. Un petit tour dans le paramètre Build Settings / Dynamic Library Install Name Base pour revenir à @rpath l'a corrigé.

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

1
encaps

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 de construction du schéma de construction. Vous pouvez y accéder en ouvrant la fenêtre d'édition du schéma actuel.

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

0
Gonzalo

J'ai eu le même problème pour une raison différente . J'ai créé une nouvelle configuration pour Debug and Release (sous PROJECT -> onglet Info -> Configuration) . Et j'ai dû changer mon framework Shell Pods- "appName" -frameworks.sh, sous Fichiers de support des cibles) pour le faire fonctionner.

[Xcode 9]

0
Yuval

Si vous utilisez Xcode 11, assurez-vous que le cadre est ajouté dans les cadres, les bibliothèques et le contenu intégré dans les paramètres de la cible - Général. Changer le statut d'intégration de - 'Ne pas intégrer' à 'Intégrer & signer' "

0
Sachin Nautiyal

Je pense qu’il n’existe aucun moyen de résoudre ce problème, qui pourrait être causé par une raison différente. J'ai également eu ce problème la semaine dernière, je ne sais pas quand ni exactement quelle est la cause de ce problème, uniquement lorsque je l'exécute sur un simulateur avec Xcode ou que je tente de l'installer sur le téléphone, puis il signale un tel type d'erreur. exécutez-le avec réactif natif run-ios avec terminal, il n'y a pas de problème.

J'ai vérifié tous les moyens affichés sur Internet, comme renouveler le certificat, modifier les paramètres dans Xcode (tous les moyens mentionnés ci-dessus), en fait, tous les paramètres dans Xcode étaient déjà définis comme ils l'avaient demandé auparavant, aucun des moyens ne fonctionne pour moi. Jusqu'au matin où je supprime les modules et que je les réinstalle, l'erreur disparaîtra au bout d'une semaine. Si vous utilisez également du cocoapod et qu'une erreur est apparue sans aucune raison spécifique, vous pouvez peut-être essayer ma façon.

  1. Vérifiez ma version de cocoapods.
  2. Mettez-le à jour si une nouvelle version est disponible.
  3. Allez dans le dossier de votre projet, supprimez votre fichier Podfile.lock, Pods, projet xcworkspace.
  4. Lancer l'installation du pod
0
Jack

J'ai constaté que ce problème concernait uniquement la signature de code et les certificats, pas le code lui-même. Pour vérifier cela, créez l'application de vue unique de base et essayez de l'exécuter sans aucune modification sur votre appareil. Si vous voyez le même type d'erreur, cela montre que votre code va bien. Comme moi, vous constaterez que vos certificats sont invalides. Téléchargez à nouveau et corrigez ceux qui ont expiré. Ensuite, lorsque vous obtenez l’application de base pour ne pas signaler l’erreur, essayez à nouveau votre application après avoir quitté Xcode et éventuellement redémarré votre Mac. Cela a finalement mis fin à ce cauchemar. Très probablement, cela n'a rien à voir avec votre code, surtout si vous recevez le message Construire avec succès lorsque vous essayez de l'exécuter. FYI

0
iOS4Fun

Ce qui a résolu le problème pour moi a été de changer abstract_target en target pour la cible principale de mon Podfile. Je l'avais précédemment défini à abstract_target et cela a causé l'erreur décrite. Maintenant cela fonctionne comme un charme

0
Francesco D.M.

Vous avez le problème lorsque vous essayez Xcode 9 beta et que vous revenez à Xcode 8. Un simple nettoyage sur la cible a résolu le problème.

0
Xavier

open xcode -> général -> Binaires incorporés -> add QBImagepicker.framework et RSKImageCropper -> projet propre

il suffit d'ajouter QBImagePicker.framework et RSKImageCropper.framework aux binaires incorporés qui ont fonctionné pour moi

0
Agustiar

La seule chose qui a fonctionné pour moi:

Cible> Phases de construction> [CP] Frameworks de pods intégrés Décochez les cases "Afficher les variables d'environnement dans le journal de construction" et "Exécuter le script uniquement lors de l'installation".

0
Neil