Question Application iOS avec le framework en panne sur l'appareil, dyld: Bibliothèque non chargée, Xcode 6 Beta


Ce crash a été un problème de blocage, essentiellement j'ai utilisé les étapes suivantes pour reproduire le problème:

  • Créer un projet Cocoa Touch Framework
  • Ajouter un fichier rapide et une classe Chien
  • Construire un cadre pour un périphérique
  • Créer une application Single View dans Swift
  • Importer un cadre dans un projet d'application
  • Instancier une classe rapide à partir du framework dans ViewController
  • Construire et exécuter l'application sur l'appareil

L'application s'est immédiatement écrasée au lancement, voici le journal de la console:

dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
  Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
  Reason: image not found

J'ai essayé de construire sur des appareils iOS 7.1 et 8.0, ils ont tous deux le même plantage. Cependant, je peux construire l'application et exécuter sur simulateur bien. Aussi je suis conscient que je peux changer le cadre de à partir de Champs obligatoires à Optionnel dans Lien binaire avec les bibliothèques, mais il n'a pas complètement résolu le problème, l'application est tombé en panne lorsque je crée une instance de Chien. Le comportement est différent sur l'appareil et le simulateur, je suppose que nous ne pouvons pas distribuer de cadre pour les appareils utilisant la version bêta de Xcode. Quelqu'un peut-il faire la lumière sur cette question?


478
2018-06-20 19:00


origine


Réponses:


Dans la cible Général onglet, il y a un Binaires intégrés champ. Lorsque vous ajoutez le framework, le crash est résolu.

La référence est ici sur les forums de développeurs Apple.


860
2018-06-21 20:20



Pour iOS supérieur ou égal à 8

Sous l'onglet Général de la cible, dans la section Fichiers binaires incorporés, ajoutez la structure. Cela copiera le framework dans le compilé afin qu'il puisse être lié à l'exécution.

enter image description here

Pourquoi cela arrive-t-il? : car le framework auquel vous liez est compilé en tant que framework lié dynamiquement et est donc lié à l'exécution.

Remarque : L'intégration de frameworks personnalisés n'est prise en charge que dans iOS> 8 et ainsi une solution alternative qui fonctionne sur les anciennes versions d'iOS suit.

Pour iOS moins de 8

Si vous avez une influence sur ce cadre (vous avez accès au code source / processus de construction), vous pouvez modifier ce cadre pour qu'il soit lié statiquement plutôt que lié dynamiquement. Cela entraînera l'inclusion du code dans votre application compilée plutôt que celle liée à l'exécution, ce qui évitera que le framework ne soit incorporé.

Comment : Sous l'onglet Configuration de la structure du cadre, dans la section Liaison, modifiez Type Mach-O à la bibliothèque statique. Vous ne devriez pas avoir besoin d'inclure le framework sous les binaires incorporés.

Static Framework

Y compris les actifs: Pour inclure des éléments tels que des images, des fichiers audio ou des fichiers xib / nib, je vous recommande de créer un bundle (essentiellement un répertoire, plus d'infos ici bit.ly/ios_bundle), puis de charger les actifs à partir du bundle à l'aide de NSBundle.


228
2018-02-12 05:13



J'ai reçu la même erreur en essayant d'ajouter manuellement mon framework créé dans mon projet. Faire glisser le cadre dans votre projet ne suffira pas. C'est comme être dans le même stade mais ne pas pouvoir retrouver vos enfants. Il m'a fallu des essais et des erreurs pour le faire fonctionner correctement, mais en suivant ces étapes, je l'ai fait.

1) Créez votre cadre

  • Développez votre cadre.
  • Une fois votre développement terminé, COMMAND+B Construisez votre cadre et assurez-vous de recevoir "Build Succeeded".

enter image description here

2) Accédez à votre framework

  • Une fois que votre projet de framework sera construit avec succès, il sera prêt à être accessible dans votre Products dossier dans votre projet.

enter image description here

  • Faites un clic droit sur votre .framework et sélectionnez "Afficher dans le Finder".

enter image description here

3) Placez le cadre dans votre projet

  • Faites glisser et déposez le .framework depuis la fenêtre du Finder vers le dossier "Framework" de votre projet d'application.

enter image description here

4) Configurer le projet d'application pour le framework

  • Sélectionnez le niveau supérieur dans votre projet

enter image description here

  • Choisissez votre cible

enter image description here

  • Allez dans "Build Phases", puis "Link Binary with Libraries", et assurez-vous que votre framework est inclus avec facultatif sélectionné.

enter image description here

  • Toujours dans "Build Phases", allez en haut à gauche et sélectionnez le + bouton. Dans la liste déroulante choisissez "Nouvelle copie des fichiers phase".

enter image description here

  • Faites défiler jusqu'à la nouvelle section "Copier les fichiers" et assurez-vous que vous définissez Destination à "Frameworks". Laissez le sous-chemin vide. Puis cliquez sur le + bouton en bas à gauche.

enter image description here

  • Vous serez présenté avec votre hiérarchie de projet. Faites défiler jusqu'à le dossier "Frameworks" auquel vous avez ajouté le framework à l'étape 3 ou recherchez-le dans la barre de recherche en haut. Sélectionnez votre cadre et cliquez sur "Ajouter".

enter image description here

  • Assurez-vous que votre framework est inclus avec "Code Sign On Copy" sélectionné.

enter image description here

5) Nettoyez, puis lancez votre projet

  • COMMAND+SHIFT+K
  • COMMAND+R

65
2018-04-04 02:26



Tout d'abord, essayez de construire après la commande + Option + Maj + K. Si échoue toujours, puis faire les étapes ci-dessous.

Si quelqu'un est confronté à cette erreur dans Xcode 8, changez le statut de votre framework en Optionnel au lieu de obligatoire sous l'onglet général de votre cible.

enter image description here


40
2017-09-12 10:00



J'ai créé un framework utilisant Swift3 / Xcode 8.1 et le consommais dans un projet Objective-C / Xcode 8.1. Pour résoudre ce problème, je devais activer Always Embed Swift Standard Libraries option sous Build Options.

Jetez un oeil à cette capture d'écran:

enter image description here

J'espère que cela pourra aider!


37
2017-11-10 13:44



Je devais (en plus de ce qui est mentionné ici) ajouter la ligne suivante à Chemins de recherche Runpath en dessous de Paramètres de construction languette:
@executable_path/Frameworks

enter image description here


23
2018-03-26 15:06



Vous devez ajouter la structure à une nouvelle phase de génération des fichiers de copie pour vous assurer que la structure est copiée dans le lot d'applications au moment de l'exécution.

Voir Comment ajouter une 'phase de construction de copie de fichiers' à ma cible pour plus d'informations.

Apple Docs officiel: https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html


20
2018-06-20 20:04



J'ai eu le même genre de problème dans la version iOS 9.x

L'ISSUE EST: App se bloque dès que j'ouvre l'application avec une erreur ci-dessous.

dyld: bibliothèque non chargée: /System/Library/Frameworks/UserNotifications.framework/UserNotifications   Référencé à partir de: /var/containers/Bundle/Application/######/TestApp.app/TestApp   Raison: image introuvable

J'ai résolu ce problème en changeant Required à Optional dans Frameworks et bibliothèques liés pour UserNotifications.framework cadre.


19
2017-11-04 09:24



Dans mon cas, la solution consistait à supprimer le framework compilé des binaires incorporés, qui était un projet autonome dans l'espace de travail, à le nettoyer et à le reconstruire, puis à le rajouter aux binaires incorporés.


7
2018-06-08 18:36



Ajouter le cadre dans les binaires incorporés enter image description here

Ensuite, nettoyez et construisez.


7
2018-03-07 16:35