web-dev-qa-db-fra.com

l'application iOS avec l'infrastructure est tombée en panne sur l'appareil, dyld: bibliothèque non chargée, Xcode 6 Beta

Ce plantage était un problème bloquant. En principe, j’ai suivi les étapes suivantes pour reproduire le problème:

  • Créer un projet Cocoa Touch Framework
  • Ajouter un fichier Swift et une classe Dog
  • Construire un cadre pour le périphérique
  • Créer une application Single View dans Swift
  • Importer un cadre dans un projet d'application
  • Instanciez la classe Swift à partir de la structure 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 crash. Cependant, je peux créer une application et m'exécuter sur un simulateur. Aussi, je suis conscient que je peux changer le framework de Obligatoire à Facultatif in Lier Binary With Libraries , mais cela n'a pas complètement résolu le problème, l'application est tombée en panne lorsque je crée une instance de Chien . Le comportement est différent sur le périphérique et le simulateur, je suppose que nous ne pouvons pas distribuer le framework pour le périphérique à l'aide de la version bêta de Xcode. Quelqu'un peut-il faire la lumière sur cette question?

500
vladof81

L'onglet Général de la cible contient un champ Embedded Binaries. Lorsque vous ajoutez le cadre, le crash est résolu.

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

897
vladof81

Pour iOS supérieur ou égal à 8

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

enter image description here

Pourquoi cela arrive-t-il? : parce que le cadre auquel vous vous associez est compilé en tant que cadre lié dynamiquement et est donc lié au moment de l'exécution. 

Remarque: L'incorporation des infrastructures personnalisées est uniquement prise en charge dans iOS> 8. Une solution alternative fonctionnant sur les anciennes versions d'iOS est ensuite proposée. 

Pour iOS moins de 8

Si vous avez une influence sur ce cadre (accès au code source/processus de construction), vous pouvez changer ce cadre pour qu'il soit lié statiquement plutôt que dynamiquement. Cela fera en sorte que le code soit inclus dans votre application compilée plutôt que lié au moment de l'exécution, de sorte que le cadre n'aura pas à être incorporé.

Comment: Sous l'onglet Paramètre de construction de la structure, dans la section Liaison, modifiez le Type Mach-O en Bibliothèque statique. Vous ne devriez plus avoir besoin d'inclure la structure sous des fichiers 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, des informations supplémentaires ici bit.ly/ios_bundle), puis de charger les actifs du bundle à l'aide de NSBundle . 

238
Dawson

Il ne suffit pas de faire glisser le cadre dans votre projet. C'est comme être dans le même stade sans pouvoir retrouver ses enfants. Suivez ces étapes:

1) Créez votre framework

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

 enter image description here

2) Accéder à votre framework

  • Une fois que votre projet d'infrastructure a été créé avec succès, il sera alors prêt pour votre accès dans votre dossier Products de 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) Place framework dans votre projet

  • Glissez et déposez le .framework de votre fenêtre du Finder dans 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 de 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 infrastructure est incluse avec l'option optionnelle sélectionnée.

 enter image description here

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

 enter image description here

  • Faites défiler la liste jusqu'à la nouvelle section "Copier les fichiers" et assurez-vous de définir Destination sur "Frameworks". Laissez le sous-chemin vide. Cliquez ensuite sur le bouton + en bas à gauche. 

 enter image description here

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

 enter image description here

  • Assurez-vous que votre infrastructure est incluse avec l'option "Code Sign On Copy" sélectionnée.

 enter image description here

5) Nettoyer, puis lancez votre projet

  • COMMAND + SHIFT + K
  • COMMAND + R
79
Brandon A

Premièrement, essayez de construire après Commande + Option + Maj + K. Si le problème persiste, procédez comme suit.

Si quelqu'un est confronté à cette erreur dans Xcode 8, modifiez le statut de votre structure en Optional au lieu de Required sous l'onglet General de votre cible.

 enter image description here

46
Desert Rose

J'ai créé un framework en 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 l'option Always Embed Swift Standard Libraries sous Build Options.

Regardez cette capture d'écran:

 enter image description here

J'espère que cela pourra aider!

44
NeverHopeless

Je devais (en plus de ce qui est mentionné ici) ajouter la ligne suivante à onglet Chemin de recherche de chemins d’accès sous Paramètres de construction:
@executable_path/Frameworks

enter image description here

25
Aviel Gross

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

Le problème est:  L'application se bloque dès que j'ouvre l'application avec l'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 non trouvée

J'ai résolu ce problème en remplaçant Required par Optional dans Linked Frameworks and Libraries pour UserNotifications.framework framework.

24
jfalexvijay

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

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

Documents Apple officiels: https://developer.Apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html

24
liamnichols

Ajoutez la structure dans les fichiers binaires incorporés  enter image description here

Puis nettoyez et construisez.

13
Vineesh TP

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

8
Andrea Leganza

Étonnamment, toutes les pièces nécessaires ne sont pas documentées ici, du moins pour Xcode 8.

Mon cas était un framework sur mesure faisant partie du même espace de travail. Il s'avère que sa construction était incorrecte. Basé sur la dernière réponse de jeremyhu à ce fil de discussion:

https://forums.developer.Apple.com/thread/4687

Je devais définir Dynamic Library Install Name Base (DYLIB_INSTALL_NAME_BASE) sous Build Settings du Framework, puis le reconstruire. Il a été incorrectement paramétré sur $(LOCAL_LIBRARY_DIR) et j'ai dû le modifier en @rpath.

Ainsi, à l'étape de traitement du lien, il demandait à l'application hôte de la charger dynamiquement à l'exécution à partir de /Library/Frameworks/fw.Framework/fw (comme dans la racine du système de fichiers) plutôt que path-to-App/Frameworks/fw.Framework/fw

En ce qui concerne tous les autres paramètres: ne doit être placé à 3 endroits dans Build Phases, mais ils sont tous définis en même temps lorsque vous l'ajoutez simplement au paramètre Embedded Binaries de l'onglet General de l'application d'hébergement.

Je n'ai pas été obligé de configurer une phase supplémentaire Copy Files, qui semble de toute façon intuitivement redondante par rapport à la phase d'intégration. En vérifiant la fin de la transcription de la construction, nous pouvons nous assurer que ce n'est pas nécessaire.

PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework

[Plusieurs lignes verbeuses ont été supprimées, mais cela ressort clairement de la transcription simplifiée de l'interface utilisateur Xcode.]

J'ai toujours no idée de la raison pour laquelle Xcode a défini la valeur DYLIB_INSTALL_NAME_BASE de manière incorrecte sur moi.

7
BaseZen

Si vous utilisez une structure tierce et utilisez Cocoapods en tant que gestionnaire de dépendance, essayez de créer un pod install pour actualiser vos pods.

Cet incident se produisait dans une bibliothèque tierce que j'utilisais. Je suis donc heureux que la solution ci-dessus fonctionne pour moi. J'espère que cela fonctionnera pour vous!

7
NYC Tech Engineer

Mon environnement: Cocos2d 2.0, Box2d, Objective C

En plus de répondre aux autres réponses ci-dessus, je suis finalement allé dans l'onglet Général et j'ai opté pour WatchKit.

 Target General Linked Frameworks and Libraries Watchkit.framework Optional

7
Jim Rota

J'ai eu le même problème. J'ai essayé de construire mon projet avec un iPhone que je n'avais jamais utilisé auparavant et je n'ai pas ajouté de nouveau cadre. Pour moi, le nettoyage a bien fonctionné ( Maj + Commande + K ). C'est peut-être parce que j'utilise la version bêta 5 de Xcode 7 et un iPhone 6 avec iOS 9 bêta, mais cela a fonctionné.

5
Fri3ndlyGerman

Si vous avez un module de développement Supprimer votre application du simulateur, installer à partir du module -> nettoyer -> réexécuter.

2
Rajesh Kumar

Dans mon cas, mon projet est écrit par objective-c et la bibliothèque contient des fichiers Swift. Alors j’ai changé "Toujours incorporer les bibliothèques standard Swift" dans l’onglet Paramètres de construction} de mon projet en Oui et c’est devenu totalement acceptable.

2
User18474728

 enter image description here

Résolu pour moi en désélectionnant l'option "Copier uniquement si installé" sur les phases de construction-> Cadres intégrés

2
Shohin

Après avoir essayé toutes les méthodes disponibles sur Internet et mes propres tentatives d’essais et erreurs 100 fois. Finalement, j'ai pu le résoudre. - Apeksha Sahu Il y a 6 minutes
Vers iTunes dans Mac -> Comptes -> Autoriser cet ordinateur - Apeksha Sahu Il y a 5 minutes
deuxième étape .... Allez au développeur dans les paramètres pour iPad et iPhone et réindexez avec des identifiants et effacez tout ce que vous voulez. Cela a fonctionné pour moi ........ ....... Après la réinstallation de la dernière version Mac OSHigh seria 10.13.15 à partir de la dernière version bêta de Mac OS, pour réinstaller la dernière version de Xcode, après la mise à jour de tous les certificats. etc etc etc ... autant de méthodes que vous pouvez penser que j'ai fait. -  enter image description here

1
Apeksha Sahu

La même chose s’est produite lorsque j’ai créé un nouveau schéma Configuration and Build.

Donc la solution pour moi était de courir 

pod install

pour cette configuration nouvellement créée.

1
atereshkov

C'est une erreur d'exécution

L'erreur Library not loaded avec @rpath[À propos] indique que Xcode ne peut pas trouver le framework.

  1. Vérifiez si le framework a été ajouté à General -> Embedded Binaries

  2. Vérifiez si le @rpath contient un chemin correct dans Build Settings -> Runpath Search Paths.

Lire la suite ici

0
yoAlex5
  1. Aller au fichier dans xcode -> Paramètres de l'espace de travail 
  2. Cliquez sur la flèche à côté de laquelle apparaît/Utilisateurs/Apple/Bibliothèque/Developer/Xcode/DerivedData.
  3. Sélectionnez les données dérivées et déplacez-les dans la corbeille. 
  4. Tout le xcode et rouvrez-le.
  5. Nettoyez le projet et exécutez à nouveau. 

Les étapes ci-dessus ont résolu mes problèmes.

0
john raja

Essayez de changer l'indicateur ALWAYS_EMBED_Swift_STANDARD_LIBRARIES (dans les versions antérieures de xcode: Embedded Content Contains Swift Code) dans les paramètres de construction de NON à OUI.

0
Vittal Pai