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?
Link Binary with Libraries
et 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.Réponses:
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.
la source
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.
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.
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.
la source
Swift is not supported for static libraries
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
COMMAND
+B
créez votre framework et assurez-vous de recevoir "Build Succeeded".2) Accédez à votre framework
Products
dossier dans votre projet..framework
et sélectionnez "Afficher dans le Finder".3) Placer un cadre dans votre projet
.framework
depuis la fenêtre du Finder dans le dossier "Framework" de votre projet d'application.4) Configurer le projet d'application pour le framework
+
bouton. Dans le menu déroulant, choisissez "Nouvelle phase de copie des fichiers".Destination
sur "Frameworks". Laissez le sous-chemin vide. Cliquez ensuite sur le+
bouton en bas à gauche.5) Nettoyez, puis exécutez votre projet
COMMAND
+SHIFT
+K
COMMAND
+R
la source
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 Libraries
option sousBuild Options
.Jetez un œil à cette capture d'écran:
la source
Embedded Binaries
section de ma cible . Alors pourquoi cela fonctionne-t-il?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.
la source
J'ai le même genre de problème dans la version iOS 9.x
J'ai résolu ce problème en passant
Required
àOptional
dansLinked Frameworks and Libraries
pour leUserNotifications.framework
cadre.la source
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
la source
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
la source
Si vous utilisez Xcode 11 ou plus récent :
Faites défiler jusqu'à Frameworks, Libraries and Embedded Content .
Assurez-vous que la valeur Embed & Sign ou Embed Without Signing est sélectionnée pour l' option Embed option si nécessaire.
la source
Ajouter le cadre dans les fichiers binaires intégrés
Ensuite, nettoyez et construisez.
la source
É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
) sousBuild Settings
le 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 auEmbedded Binaries
paramètre de l'General
onglet de l'application d'hébergement.Je n'ai pas eu à mettre en place de
Copy Files
phase 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.[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_BASE
mal réglé la valeur sur moi.la source
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.
la source
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.
la source
Si vous utilisez un framework tiers et que vous utilisez Cocoapods comme gestionnaire de dépendances, essayez de faire un
pod install
pour 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!
la source
Résolu pour moi en désélectionnant "Copier uniquement une fois installé" dans les phases de construction-> Intégrer les cadres
la source
Il s'agit d'une erreur d'exécution causée par
Dynamic Linker
L'erreur
Library not loaded
avec@rpath
indique queDynamic Linker
le binaire est introuvable.Vérifiez si le cadre dynamique a été ajouté à
General -> Embedded Binaries
Vérifiez la
@rpath
configuration entre le consommateur (application) et le producteur (cadre dynamique):Build Settings -> Dynamic Library Install Name
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é parloadable bundle
(Dynamic framework
comme dérivé) oùdyld
entrent en jeuDynamic Library Install Name
- chemin vers le fichier binaire (pas .framework). Oui, ils ont le même nom, maisMyFramework.framework
est unpackaged bundle
avecMyFramework
fichier 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 uniquechemin absolu - exemple Framework1
@executable_path
@executable_path - relatif à l'entrée binaire - Exemple d' utilisation de Framework2
: incorporer un
Dynamic framework
dans une application@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
@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
.Build Phases -> Embed Frameworks -> Destination, Subpath
pour être à l'endroit où se trouve exactement le cadre d'intégrationCadre dynamique:
Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)
- point qui@rpath
est utilisé avec le chemin du paquet local vers un binaire*
../
- aller au parent du répertoire courantotool
- outil d'affichage de fichier objetinstall_name_tool
modifier les noms d'installation des bibliothèques partagées dynamiques à l'aide de-rpath
CocoaPods
utiliseuse_frameworks!
[About] pour réguler unDynamic Linker
[Vocabulaire]
la source
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
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.
la source
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é.
la source
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.
la source
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.
Une fois la ligne supprimée de votre fichier que vous avez enregistré, il vous suffit d'exécuter la console:
la source
Si vous avez un module de développement Supprimez votre application de l'installation du simulateur à partir du module -> nettoyer -> relancer ...
la source
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
pour cette configuration nouvellement créée.
la source
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. -
la source
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.la source
Xcode 11
la source
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 .
2: Deuxième changement le nom de la phase ajoutée en incorporer des cadres
3: Changez la destination en Frameworks .
4: Ajoutez le framework pour lequel l'erreur s'est produite.
la source
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:
Supprimez le framework qui donne l'erreur des "Frameworks et bibliothèques liés" sous l'onglet Général.
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;)
la source
Les étapes ci-dessus ont résolu mes problèmes.
la source
La solution simple est de suivre cette capture d'écran, puis le crash disparaîtra:
Noté: c'est Xcode 11.5
la source
Au cas où quelqu'un rencontrerait toujours ce problème, bien que vous ayez suivi toutes les étapes décrites dans les nombreuses autres réponses, vous devrez peut-être révoquer et recréer votre certificat de signature de code , comme suit:
https://developer.apple.com/library/ios/qa/qa1886/_index.html
la source