Application iOS avec cadre écrasé sur l'appareil, dyld: bibliothèque non chargée, Xcode 6 Beta


573

Ce plantage a été un problème de blocage. J'ai utilisé les étapes suivantes pour reproduire le problème:

  • Créer un projet Cocoa Touch Framework
  • Ajouter un fichier rapide et un chien de classe
  • Créer un cadre pour l'appareil
  • Créer une application Single View dans Swift
  • Importer le framework dans le projet d'application
  • Instancier une classe rapide à partir du framework dans ViewController
  • Créez et exécutez une application sur l'appareil

L'application s'est écrasée immédiatement 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 exécuter correctement le simulateur. De plus, je suis conscient que je peux changer le cadre pour former Obligatoire à Facultatif dans Link Binary With Libraries , mais cela n'a pas complètement résolu le problème, l'application s'est bloquée lorsque je crée une instance de Dog . Le comportement est différent sur l'appareil et le simulateur, je soupçonne que nous ne pouvons pas distribuer un cadre pour l'appareil en utilisant une version bêta de Xcode. Quelqu'un peut-il faire la lumière sur cette question?


1
Ce que je ne comprends pas, c'est pourquoi tous les autres cadres tiers fonctionnent prêts à l'emploi et peuvent facilement être glissés et déposés dans Link Binary with Librarieset Xcode sait en quelque sorte les copier dans votre bundle d'application, alors que pour les cadres personnalisés, cela ne se produit tout simplement pas.
fatuhoku

la réponse de sazzad hissain khan ici stackoverflow.com/questions/26024100/… est la meilleure réponse ..
Ankit Kumar


vous pouvez faire une bibliothèque de matières grasses, vous pouvez voir ce lien: stackoverflow.com/a/54977145/3992606
mohsen

La version Xcode ne correspond pas , résolue avec stackoverflow.com/a/55738882/5443510 .
Jimmy Yin

Réponses:


975

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

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


73
J'ai le cadre dans les fichiers binaires intégrés et j'ai également la phase de copie définie sur "Frameworks". Il se bloque quand même.
loretoparisi

11
Cela n'a été résolu qu'en mode de débogage. Une erreur se reproduira lorsque vous archivez ou générez un projet
Saad Ur Rehman

13
L'ajout de @ executable_path / Frameworks au 'Runpath Search Path' a résolu ce problème, c'est-à-dire en plus d'ajouter le framework aux 'Embedded Binaries'
ArdenDev

14
N'importe qui peut aider à ajouter un cadre dans les fichiers binaires intégrés, à partir des POD?
Bonnke

3
Idem. J'aimerais également savoir comment ajouter des POD, étant donné qu'il n'y a pas de "Général> Binaires intégrés" à trouver dans XCode 6.4 en utilisant PODS
déduit le

259

Pour iOS supérieur ou égal à 8

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

entrez la description de l'image ici

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

** Remarque: ** L'incorporation de cadres personnalisés n'est prise en charge que dans iOS> 8 et, par conséquent, une solution alternative qui fonctionne sur les anciennes versions d'iOS suit.

Pour iOS moins de 8

Si vous influencez ce framework (avez accès au code source / processus de construction), vous pouvez changer ce framework pour qu'il soit lié statiquement plutôt que dynamiquement. Cela entraînera l'inclusion du code dans votre application compilée plutôt que son lien au moment de l'exécution et donc le cadre n'aura pas à être incorporé.

** Comment: ** Sous l'onglet Build Setting du framework, dans la section Linking, changez Mach-O Type en Static Library. Vous ne devriez désormais plus avoir besoin d'inclure le framework sous les binaires intégrés.

Cadre statique

Y compris les éléments: pour inclure des éléments tels que des images, des fichiers audio ou des fichiers xib / nib, je recommande de créer un ensemble (essentiellement un répertoire, plus d'informations ici bit.ly/ios_bundle), puis de charger les éléments de l'ensemble en utilisant NSBundle.


1
Comment puis-je ajouter un framework aux binaires intégrés, si le framework est dans les pods?
TomazStoiljkovic

Qu'entendez-vous par «le cadre est dans les pods»? Que votre framework personnalisé est distribué via CocoaPods?
Dawson

2
Cela doit être "supérieur ou égal à 8". J'ai également dû le faire sur iOS 8.
Cruinh

erreurSwift is not supported for static libraries
jose920405

@TomazStoiljkovic avez-vous compris cela? J'ai le même problème, j'ai un framework que je veux construire en binaire, mais cela dépend d'autres frameworks via des cacao pods.
MegaManX

125

Faire simplement glisser le framework dans votre projet ne sera pas suffisant. C'est comme être dans le même stade mais ne pas pouvoir trouver vos enfants. Suivez ces étapes:

1) Créez votre cadre

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

entrez la description de l'image ici

2) Accédez à votre framework

  • Une fois que votre projet de framework sera correctement construit, il sera alors prêt à être accédé dans votre Productsdossier dans votre projet.

entrez la description de l'image ici

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

entrez la description de l'image ici

3) Placer un cadre dans votre projet

  • Glissez et déposez le .frameworkdepuis la fenêtre du Finder dans le dossier "Framework" de votre projet d'application.

entrez la description de l'image ici

4) Configurer le projet d'application pour le framework

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

entrez la description de l'image ici

  • Choisissez votre cible

entrez la description de l'image ici

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

entrez la description de l'image ici

  • 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".

entrez la description de l'image ici

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

entrez la description de l'image ici

  • Vous serez présenté avec la hiérarchie de votre projet. Faites défiler 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".

entrez la description de l'image ici

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

entrez la description de l'image ici

5) Nettoyez, puis exécutez votre projet

  • COMMAND+ SHIFT+K
  • COMMAND+R

5
Bon point. Cela fonctionne presque pour moi. J'ai fait un cadre A, qui comprend Alamofire. Mon application hôte (framework embarqué A) fonctionne dans les simulateurs. Mais lorsque j'essaie de l'exécuter dans un véritable iPhone, il se bloque avec une erreur: Alamofire: dyld: bibliothèque non chargée: @ rpath / Alamofire.framework / Alamofire Motif: aucune image appropriée trouvée. A trouvé: xxx / ddcdemo.app / Frameworks / iddc.framework / Frameworks / Alamofire.framework / Alamofire: mach-o, mais mauvaise architecture
DàChún

1
@Brandon Rendre optionnel au framework a résolu mon problème. Mais pouvez-vous s'il vous plaît m'expliquer quel est le comportement de rendre le framework optionnel?
Mitesh Dobareeya

2
Je vous remercie! Dans votre étape 5, j'avais coché «Copier uniquement lors de l'installation» et c'était mon problème.
Andi

48

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

Jetez un œil à cette capture d'écran:

entrez la description de l'image ici


3
Cela fonctionnait maintenant pour moi à. La solution à ce problème consiste à accéder à BuildPhases -> Copier les fichiers -> sélectionnez Framework sous Destination et ajoutez votre framework. Il y a des chances que votre bibliothèque soit manquante ici.
Harish

@Harish, La solution que vous proposez est déjà suggérée par plusieurs et je m'occupe définitivement de cela au premier point. Dans mon cas, le cadre y a été ajouté mais le même problème est toujours apparu. Ensuite, je le creuse moi-même. Si vous avez voté contre cette solution, je ne sais pas pourquoi vous êtes sûr de votre chemin alors que cela n'a pas fonctionné dans mon cas: S
NeverHopeless

@Harish Merci. Votre réponse m'a beaucoup plus aidé et bien sûr NeverHopeless's l'a également fait :) Merci les gars
Mohsin Khubaib Ahmed

Ce fut la seule chose qui a fonctionné pour moi .. mais je suis déjà en "intégrant" le cadre dans la Embedded Binariessection de ma cible . Alors pourquoi cela fonctionne-t-il?
guptron

Génial, cette chose fonctionne parce que si vous utilisez une bibliothèque rapide ou un pod à intégrer dans un projet objectif C. Le projet de l'objectif C porte souvent ce drapeau à Non.
Swaroop S

47

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

Si quelqu'un est confronté à cette erreur dans Xcode 8, modifiez l'état de votre infrastructure en Facultatif au lieu de Obligatoire sous l'onglet Général de votre cible.

entrez la description de l'image ici


3
Cela rendra le runtime pour ne pas reconnaître les classes du framework
tesla

@azimov est correct. Je fais face à ce dilemme en ce moment. Obligatoire provoque l'erreur "image introuvable" et si nous essayons de la définir sur facultative, elle se bloquera à l'exécution avec "sélecteur non reconnu"
Adam Mendoza

1
Même si mon framework était déjà dans Link Binaries and Embed, j'avais encore à ajouter une phase de copie. dyld: Bibliothèque non chargée: @ rpath / AFNetworking.framework / AFNetworking Référencé depuis: / Users / {User} / Library / Developer / CoreSimulator / Devices / 6833A85C-5783-45FA-A4D5-991D286B28C2 / data / Containers / Bundle / Application / B1A0A3B2-92A2-41B0-9884-6DB6995A0D7E / MyApp.app / MyApp Raison: image introuvable (lldb) Solution: Projet -> Cible -> Phases de construction -> + en haut pour ajouter une nouvelle phase de copie de fichiers Destination = Frameworks Sélectionnez le cadre Framework qui doit être copié
Adam Mendoza

@AdamMendoza J'ai vu mon application rejetée à cause de cela.
jbouaziz

@jbouaziz, oui, une erreur que vous pouvez rencontrer est due au fait que le .framework est lourd, ce qui signifie qu'il a des architectures qui ne sont pas prises en charge sur iOS telles que i386 x86_64 en plus du nécessaire armv7 arm64. Le magasin vous donnera une erreur, mais vous ne pouvez pas voir l'erreur dans Xcode. Utilisez le chargeur sous Xcode -> Open Developer Tool -> Application Loader. SolutionL le rendre mince voir -> ikennd.ac/blog/2015/02/…
Adam Mendoza

28

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

LE PROBLÈME EST: 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é depuis: /var/containers/Bundle/Application/######/TestApp.app/TestApp Raison: image introuvable

J'ai résolu ce problème en passant Requiredà Optionaldans Linked Frameworks and Librariespour le UserNotifications.frameworkcadre.


Cela marche. Quelqu'un sait-il pourquoi? Certains appareils ont besoin de ce paramètre, d'autres non.
NEO

J'obtiens "avertissement: impossible d'exécuter du code de prise en charge pour lire les données de classe Objective-C dans le processus. Cela peut réduire la qualité des informations de type disponibles." quand marquer ma bibliothèque comme optionnelle
BergP

cela a fonctionné peut-être la raison est qu'un cadre n'a pas fonctionné dans le simulateur c'est pourquoi
Gowtham Sooryaraj

@ redent84 Cette réponse, ainsi que votre commentaire, m'ont évité de devenir fou. Ran dans ce problème avec AuthenticationServices.framework, qui nécessite iOS 12.
Tamás Sengel

26

J'ai dû (en plus de ce qui est mentionné ici) ajouter la ligne suivante aux chemins de recherche Runpath sous l' onglet Paramètres de build :
@executable_path/Frameworks

entrez la description de l'image ici


Cela a résolu le problème pour moi. J'ai commencé à avoir le problème après avoir ajouté une extension d'application à mon application iOS 9. Avant d'ajouter l'extension, mon framework a été trouvé très bien. L'ajout d'une phase de génération de fichiers de copie n'a pas aidé, et j'étais déjà en train d'intégrer le framework.
Greg

C'est tellement étrange que cela ne soit pas inclus par défaut. Si vous décompressez et regardez votre IPA, vous devriez trouver vos frameworks dans Payloads / appname.app / Frameworks /. Cependant, l'ajout de ce chemin de recherche doit être là pour que l'application recherche dans ce dossier pendant l'exécution. Bizarre.
mattv123

25

Vous devez ajouter le cadre à une nouvelle phase de création de fichiers de copie pour vous assurer que le cadre est copié dans le bundle d'application 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 officiels Apple: https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html


Après avoir essayé tant de choses, c'est ce qui l'a résolu pour moi. J'avais déjà le cadre dans Link Binary et Embed Framework. Je ne pensais pas que je devais également ajouter une phase de copie, mais cela l'a corrigé.
Adam Mendoza

14

Si vous utilisez Xcode 11 ou plus récent :

  1. Accédez aux paramètres de votre cible et sélectionnez Général .

Paramètres cibles / Général

  1. Faites défiler jusqu'à Frameworks, Libraries and Embedded Content .

  2. Assurez-vous que la valeur Embed & Sign ou Embed Without Signing est sélectionnée pour l' option Embed option si nécessaire.

Section Cadres, bibliothèques et contenu intégré


13

Ajouter le cadre dans les fichiers binaires intégrés entrez la description de l'image ici

Ensuite, nettoyez et construisez.


11

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

Mon cas était un cadre sur mesure faisant partie du même espace de travail. Il s'avère qu'il était mal construit. Basé sur la dernière réponse de jeremyhu à ce fil:

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

J'ai dû mettre Dynamic Library Install Name Base( DYLIB_INSTALL_NAME_BASE) sous Build Settingsle Framework Framework puis le reconstruire. Il était mal réglé $(LOCAL_LIBRARY_DIR)et j'ai dû le changer @rpath.

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

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

Je n'ai pas eu à mettre en place de Copy Filesphase supplémentaire , ce qui me semble intuitivement redondant par rapport à l'étape 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

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

Je n'ai toujours aucune idée pourquoi Xcode a DYLIB_INSTALL_NAME_BASEmal réglé la valeur sur moi.


1
Merci, cela s'est avéré être mon problème dans Xcode 11. J'importais l'un de mes propres frameworks, qui fonctionnait auparavant, mais j'ai commencé à émettre l'erreur "dyld: Library not Charger". Pour être clair, vous souhaitez définir le paramètre de génération "Dynamic Library Install Name Base" sur "@rpath" dans le projet du framework que vous essayez d'importer, pas dans le projet dans lequel vous importez. D'une manière ou d'une autre, il a été défini sur "/ Library / Frameworks".
Ben Stahl

Heureux que cela ait été utile 3 ans plus tard. Modifié en conséquence.
BaseZen

9

Dans mon cas, la solution était de supprimer le cadre compilé des binaires intégrés, qui était un projet autonome dans l'espace de travail, de le nettoyer et de le reconstruire, et enfin de l'ajouter à nouveau aux binaires intégrés.


8

Mon environnement: Cocos2d 2.0, Box2d, Objective C

En plus de faire les autres réponses ci-dessus, je suis finalement allé dans l'onglet Général et j'ai rendu WatchKit facultatif.

Cibler les cadres et bibliothèques liés généraux Watchkit.framework Facultatif


8

Si vous utilisez un framework tiers et que vous utilisez Cocoapods comme gestionnaire de dépendances, essayez de faire un pod installpour actualiser vos pods.

Ce plantage se produisait sur une bibliothèque tierce que j'utilisais, alors content que la solution ci-dessus ait fonctionné pour moi, j'espère que cela fonctionne pour vous!


1
Génial! résolu mon problème. Mais existe-t-il un moyen d'éviter d'installer les dépendances de pod dans mon application hôte?
DàChún

8

entrez la description de l'image ici

Résolu pour moi en désélectionnant "Copier uniquement une fois installé" dans les phases de construction-> Intégrer les cadres


1
Ce serait bien de savoir à quoi sert cette case à cocher si le système ne croit pas que "l'installation de débogage" n'est pas "l'installation". Quoi qu'il en soit, si cela provoque un crash de l'application sur le matériel au lieu d'interdire l'exécution de l'application avec un avertissement, c'est un autre défaut de Xcode soigné
William Cerniuk

8

Il s'agit d'une erreur d'exécution causée par Dynamic Linker

dyld: Library not loaded: @rpath/...
...
Reason: image not found

L'erreur Library not loadedavec @rpathindique que Dynamic Linkerle binaire est introuvable.

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

  2. Vérifiez la @rpathconfiguration entre le consommateur (application) et le producteur (cadre dynamique):

    • Cadre dynamique:
      • Build Settings -> Dynamic Library Install Name
    • Application:
      • Build Settings -> Runpath Search Paths
      • Build Phases -> Embed Frameworks -> Destination, Subpath

Éditeur de liens dynamique

Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)qui est utilisé par loadable bundle( Dynamic frameworkcomme dérivé) où dyldentrent en jeu
Dynamic Library Install Name- chemin vers le fichier binaire (pas .framework). Oui, ils ont le même nom, mais MyFramework.frameworkest un packaged bundleavec MyFrameworkfichier binaire et des ressources à l' intérieur.
Ce chemin vers le répertoire peut être absolu ou relatif (par exemple @executable_path, @loader_path, @rpath). Le chemin relatif est plus préférable car il est modifié avec une ancre qui est utile lorsque vous distribuez votre bundle en tant que répertoire unique

chemin absolu - exemple Framework1

//Framework1 Dynamic Library Install Name
/some_path/Framework1.framework/subfolder1

@executable_path

@executable_path - relatif à l'entrée binaire - Exemple d' utilisation de Framework2
: incorporer un Dynamic frameworkdans une application

//Application bundle(`.app` package) absolute path
/some_path/Application.аpp

//Application binary absolute path 
/some_path/Application.аpp/subfolder1

//Framework2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

//Framework2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework2 Dynamic Library Install Name 
@executable_path/../Frameworks/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
/some_path/Application.аpp/subfolder1/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

@loader_path

@loader_path - par rapport au bundle propriétaire de ce
cas d'utilisation binaire : framework avec framework embarqué - Framework3_1 avec Framework3_2 à l' intérieur

//Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

//Framework3_1 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_1 @loader_path == Framework3_1 @executable_path
/some_path/Application.аpp/subfolder1

//Framework3_2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_2 @loader_path == Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 Dynamic Library Install Name 
@loader_path/../Frameworks/Framework3_2.framework/subfolder1

//Framework3_2 binary resolved absolute path by dyld
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1/../Frameworks/Framework3_2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

@rpath - Chemin de recherche Runpath

Exemple de Framework2

Auparavant, nous devions configurer un Framework pour travailler avec dyld. Ce n'est pas pratique car le même Framework ne peut pas être utilisé avec des configurations différentes

@rpath est un concept composé qui repose sur des parties externes (Application) et imbriquées (Dynamic framework):

  • Application:

    • Runpath Search Paths(LD_RUNPATH_SEARCH_PATHS)- définit une liste de modèles à remplacer par @rpath.
       @executable_path/../Frameworks
    • Revoir Build Phases -> Embed Frameworks -> Destination, Subpathpour être à l'endroit où se trouve exactement le cadre d'intégration
  • Cadre dynamique:

    • Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)- point qui @rpathest utilisé avec le chemin du paquet local vers un binaire
      @rpath/Framework2.framework/subfolder1
//Application Runpath Search Paths
@executable_path/../Frameworks

//Framework2 Dynamic Library Install Name
@rpath/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
//Framework2 @rpath is replaced by each element of Application Runpath Search Paths
@executable_path/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

*../ - aller au parent du répertoire courant

otool - outil d'affichage de fichier objet

//-L print shared libraries used
//Application otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//Framework2 otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//-l print the load commands
//Application otool -l
LC_LOAD_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

LC_RPATH
@executable_path/../Frameworks

//Framework2 otool -l
LC_ID_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

install_name_tool modifier les noms d'installation des bibliothèques partagées dynamiques à l'aide de -rpath

CocoaPodsutilise use_frameworks![About] pour réguler unDynamic Linker

[Vocabulaire]


6

Nous avons récemment rencontré ce problème avec l'importation de CoreNFC sur des iPhone plus anciens (par exemple iPhone 6) et Xcode (11.3.1). J'ai pu le faire fonctionner en

  1. Dans vos projets , sélectionnez la cible.
  2. Goto General onglet en haut.
  3. Dans la section « Cadres, bibliothèques et contenu intégré ', ajoutez le framework (pour moi c'était CoreNFC). Répétez l'opération pour les autres cibles.
  4. Cliquez sur Build Phases en haut et développez ' Link Binary with Libraries '.
  5. Rendez le cadre problématique facultatif (à partir de requis).

Cela m'a permis de compiler pour les iPhones plus anciens / plus récents sans apporter de modifications de code. J'espère que cela aide les autres.


1
MERCI. Le rendre facultatif était le chaînon manquant ...
fl034

ne fonctionne pas, l'application se bloque et aucun message n'indique le type de plantage au lieu d'un point d'arrêt sur un code d'assembly.
Newsonic

pourquoi est-ce nécessaire pour rendre facultatif?
rohitwtbs

5

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 framework. Pour moi, le nettoyage a bien fonctionné ( Maj + Commande + K ). C'est peut-être parce que j'utilise la bêta 5 de Xcode 7 et un iPhone 6 avec iOS 9 Beta, mais cela a fonctionné.


Et peut-être aussi un dossier de construction propre (CMD + Maj + Alt + K)
Grifas

4

Dans mon cas, mon projet est écrit par objective-c et dans la bibliothèque il y a des fichiers Swift. J'ai donc changé "Always Embed Swift Standard Libraries" dans l' onglet Build Settings de mon projet en Yes et c'est devenu tout à fait correct.


4

Pour tout projet ou projet Framework dans Xcode qui utilise des pods, un moyen simple d'éviter la bibliothèque dynamique (dylb) de ne pas charger est de définir votre fichier pod à l'encre en mode statique. Pour ce faire, assurez-vous simplement de ne pas écrire la ligne suivante dans votre fichier pod.

use_frameworks!

Une fois la ligne supprimée de votre fichier que vous avez enregistré, il vous suffit d'exécuter la console:

$ pod update

2

Si vous avez un module de développement Supprimez votre application de l'installation du simulateur à partir du module -> nettoyer -> relancer ...


2

La même chose était quand j'ai créé un nouveau schéma de configuration et de construction.

Donc, la solution pour moi était de courir

pod install

pour cette configuration nouvellement créée.


1

Après avoir essayé toutes les méthodes disponibles sur Internet et mes propres essais et erreurs 100 fois. Enfin, j'ai pu le résoudre. - Apeksha Sahu il y a 6 minutes
Aller à iTunes dans Mac -> comptes -> Autoriser cet ordinateur - Apeksha Sahu il y a 5 minutes
deuxième étape .... Aller au développeur dans les paramètres de l'iPad et de l'iPhone et réindexer avec les identifiants et effacer tout les ordinateurs de confiance. Cela a fonctionné pour moi ........ ....... Après avoir réinstallé Mac OSHigh seria 10.13.15 version de Mac OS seirra beta dernière version, pour réinstaller Xcode dernière version, après avoir mis à jour tous les certificats. etc etc etc ... autant de méthodes que vous pouvez le penser. -entrez la description de l'image ici


1

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


1

Xcode 11

  1. Accédez aux paramètres de votre cible et sélectionnez Général.
  2. Recherchez «Frameworks, Libraries et Embedded Content»
  3. Conservez «Ne pas intégrer» et assurez-vous que toutes vos cibles (si vous en avez plusieurs) n'ont défini que leur propre cadre et pas d'autres cibles.

1

Dans Xcode 11

J'étais confronté au même problème

Modification de «Ne pas incorporer» dans l'onglet Général > «Cadres, bibliothèques et contenu incorporé» entraînait toujours la même erreur.

Ce qui a résolu pour moi l'ajout du cadre dans l' onglet Phases de construction > section Intégrer les cadres

--Mise à jour---

J'ai observé que dans les projets construits dans les versions précédentes de la section Frameworks Xcode Embed n'est pas disponible lors de l'exécution dans Xcode 11, recherchez les étapes ci-dessous pour obtenir la solution:

1: Vous devez d'abord ajouter la nouvelle phase de copie des fichiers sous l' onglet Phases de construction .

entrez la description de l'image ici

2: Deuxième changement le nom de la phase ajoutée en incorporer des cadres entrez la description de l'image ici

3: Changez la destination en Frameworks .

entrez la description de l'image ici

4: Ajoutez le framework pour lequel l'erreur s'est produite.

entrez la description de l'image ici


1

Bien que tout le monde dise d'intégrer le cadre sous les binaires intégrés, mais cela ne fonctionne toujours pas, car il nous manque une étape importante ici.

Voici les deux bonnes étapes pour ajouter les binaires sous l'onglet Binaires intégrés:

  1. Supprimez le framework qui donne l'erreur des "Frameworks et bibliothèques liés" sous l'onglet Général.

  2. Maintenant, ajoutez le framework supprimé uniquement sous l'onglet Binaires intégrés et c'est tout ce qu'il faudrait faire.

Exécutez-le sur l'appareil et gardez ce sourire;)


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

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


0

La solution simple est de suivre cette capture d'écran, puis le crash disparaîtra:

entrez la description de l'image ici

Noté: c'est Xcode 11.5


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.