"dyld: Library not loaded, reason: image not found" ou comment embarquer une librairie à lien dynamique / framework avec iOS 8+

Le problème :

Au cours du développement d'une application, j'ai eu besoin d'ajouter un sous-projet produisant un "Framework" (autrement dit une dépendance installée via Carthage).

Lors de l'execution sous l'émulateur, tout fonctionna très bien.
Mais en lançant l'application sur un appareil physique, il apparut un message proche de celui-ci :

dyld: Library not loaded: @rpath/Machin.framework/Machin

Referenced from: /var/mobile/Applications/FA6...B6/MachinApp.app/MachinApp
Reason: image not found


Que faire dans ce cas ?

Dans l'onglet "cible" du projet dépendant, ajouter le framework via la liste "Embedded Binairies".




Voici une capture d'écran montrant la structure du projet et la fenêtre de dialogue permettant d'ajouter la dépendance binaire.






Et si cela ne fonctionne toujours pas ?

Dans ce cas, il convient de vérifier si le Framework s'installe au bon endroit lors de la construction du projet cible.

En effet, un Framework qui venait à être copié au mauvais endroit sera, de facto, impossible à charger.

Pour savoir à quel endroit votre projet cible s'attend à trouver ses dépendances, il faut executer la commande suivante :


otool -L {{chemin vers le fichier exécutable}}

Une fois la liste des emplacements affichée, il ne reste plus qu'à vérifier que le chemin d'installation du Framework correspond bien dans le project de la dépendance.


Commentaires

Posts les plus consultés de ce blog

Construire le compilateur "Portable Object Compiler" et ses librairies sous AmigaOS4.x

Mettre en place un environnement de développement pour AmigaOS 4.1FE