J'ai importé un framework pour envoyer des e-mails depuis une application en arrière-plan, c'est-à-dire un SKPSMTPMessage
framework. Quelqu'un peut-il suggérer pourquoi l'erreur ci-dessous est affichée
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_SKPSMTPMessage", referenced from:
objc-class-ref in ConfirmController.o
"_kSKPSMTPPartContentTransferEncodingKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
"_kSKPSMTPPartMessageKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
"_kSKPSMTPPartContentTypeKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
Source à partir de laquelle le cadre est tiré: -
Verrouillage des champs dans MFMailComposeViewController
Mise à jour :
Réponse: il suffit de glisser-déposer le dossier sur le projet et de cliquer sur copier. C'est aussi sélectionner la case à cocher projet et la case à cocher cible.
Réponses:
Vous pouvez obtenir ce type d'erreur si le fichier .m de votre classe n'est pas répertorié sous l'étape "Compiler les sources" de l'onglet "Générer des phases" de votre cible. Normalement, Xcode le fait pour vous, mais parfois il perd le tracé et vous devez ajouter le fichier .m manuellement.
Pour faire ça:
TargetSettings -> Build Phases -> Compile Sources -> add your .m class -> Build and Run
la source
-lLibraryName_$(PLATFORM_NAME)d
for Debug , and add-lLibraryName_$(PLATFORM_NAME)
for Releasepour moi, le problème s'est avéré être des cadres manquants. Une fois que je les ai ajoutés, cela a fonctionné.
la source
Vérifiez les propriétés Valid Architectures & Build Active Architecture only.
la source
si vous utilisez des cocoapods, assurez-vous que les paramètres de construction de votre cible contiennent $ (hérité) dans la section des autres indicateurs de l'éditeur de liens
la source
Votre framework est-il compilé pour armv (x)? Il me semble qu'il a été compilé pour i386, dont le code ne fonctionnera pas sur un appareil iOS. Ou bien il est compilé pour armv (x) et vous essayez de l'exécuter sur le simulateur, qui est le code i386. Assurez-vous, en utilisant les paramètres de construction d'Akshay affichés ci-dessus, que votre framework est correctement compilé pour la puce sur laquelle vous allez l'exécuter.
la source
Si vous importez un autre projet dans xcode et si le projet en cours et le projet d'importation ont tous les deux les mêmes fichiers dans la source du compilateur, supprimez simplement le même fichier dans le projet en cours dans les paramètres de "Phase de construction". Cela a fonctionné pour moi.
la source
Oui, cela est lié à ce que Allen a dit ... recherchez TargetMembership dans la section Utilitaires du fichier source. il y a une case à cocher qui associe ce fichier à un projet. Vérifier cela a résolu ce problème pour moi aussi.
la source
Il est également possible que vous n'ayez pas de lien avec une bibliothèque binaire, vérifiez les phases de construction dans vos tarifs, ajoutez les bibliothèques requises, puis Produit> Nettoyer le produit> Créer
Ça doit aussi marcher!
la source
J'ai eu ce problème lorsque j'ai ouvert le même projet deux fois, un seul projet était l'original et l'autre a été cloné à partir d'une URL git.
'Produit'> 'Nettoyer' a résolu le problème.
la source
J'ai également rencontré ce problème et je l'ai résolu en vérifiant si la source de compilation et le lien binaire avec la bibliothèque contenaient tous les fichiers / bibliothèques / framework dont j'avais besoin.
la source
Quand j'ai rencontré le même problème que celui-ci:
Il s'est avéré que j'ai juste oublié d'ajouter un cadre. C'était QuartzCore.framework pour être exact.
la source
essayez celui-ci en dernier:
j'ai donc essayé toutes les suggestions sur cette page .. aucune n'a fonctionné .. La façon dont mon problème a commencé était en suivant les étapes de ce tutoriel qui enseigne comment lier des bibliothèques statiques. Avec mon exemple de projet, les instructions ont bien fonctionné .. mais sur mon projet réel, j'ai commencé à obtenir l'erreur ci-dessus.
Donc , ce que je faisais était passer par chaque étape de ladite tutoriel et construit après chaque étape .. la ligne incriminée est avéré être celui - ci: l' ajout -all_load à construire Paramètres-> autres drapeaux de l' éditeur de liens
il s'est avéré que ce drapeau était recommandé une fois pour lier les catégories aux bibliothèques statiques .. mais il s'est avéré que ce drapeau n'était plus nécessaire Xcode 4.2+ .. (il en va de même pour le drapeau -force_load .. qui était également recommandé dans d'autres postes ) ..
la source
Lorsque j'ai rencontré le même problème, j'ai oublié d'ajouter "version compilée de la bibliothèque (avec l'extension .a)". Normalement, nous ajoutons la bibliothèque du projet importé dans Dépendance cible dans les phases de construction, mais nous oublions d'ajouter "bibliothèque compilée" dans Link Binary avec les bibliothèques dans les phases de construction.
la source
Ajouter ce qui a fonctionné pour moi au cas où d'autres auraient le même problème et finiraient ici. J'avais un projet plus ancien dont le paramètre CLANG_ENABLE_MODULES était réglé sur Non. Après des heures de frustration, j'ai comparé à un projet qui fonctionnait et j'ai constaté que l'option Activer les modules n'était pas définie dans mes paramètres de construction LLVM. La définition de Oui a résolu mon problème et l'application fonctionne correctement.
Paramètres du projet -> Paramètres de construction -> recherchez «Modules» et mettez à jour les modules d'activation (C et Objective-C) sur OUI.
la source
Je n'ai pas ajouté le "-all_load -lstdc ++" à d'autres indicateurs de l'éditeur de liens dans le paramètre de génération et j'ai pu lancer la simulation sans erreur, mais je n'ai pas obtenu la sortie du journal MonkeyTalk lors du lancement et le script précédent que j'ai écrit et utilisé pour se connecter montrait maintenant le bouton de lecture comme désactivé. La sortie de MT IDE s'affiche comme "Connexion définie sur iOS Simulator", mais pas en mesure de sélectionner le bouton d'exécution / lecture.
Le projet d'origine avait "ObjC -all_load" dans les autres drapeaux de l'éditeur de liens et quand j'ai ajouté le "-all_load -lstdc ++" avec lui, j'ai reçu le message d'erreur sur ce post. Lorsque j'ai supprimé le "ObjC -all_load" et ajouté uniquement le "-all_load -lstdc ++" que le projet a construit, mais toujours pas de déconnexion de conversation de singe mise comme confirmation dans la console
la source
Il est possible que vous utilisiez une bibliothèque qui n'est compilée que pour du VRAI matériel. Par exemple, si vous utilisez une bibliothèque Bluetooth comme le Zephyr HxM Smart, elle ne se compilera probablement pas sur le simulateur et est uniquement destinée à fonctionner sur de vrais appareils.
la source
A rencontré un problème similaire avec IOS 6. A pu le résoudre en ajoutant storekit.framework au "Link Binary with Libraries" dans la section des phases de construction.
Maintenant, cela fonctionne comme un charme.
la source
j'ai le même problème avec 7 erreurs lorsque j'ajoute PSTCollectionviewcontroller. La seule solution à ce problème est de vérifier vos "xcode -> phases de construction -> sources de compilation" ici ajoutez tous vos fichiers ".m" .. J'espère que vous poster aidera les utilisateurs à l'avenir.
la source
Sur le mien, j'utilisais des Cocoapods pour un projet de réalité augmentée et ce que j'ai découvert, c'est que lorsque vous implémentez des cocoapods et ouvrez l'espace de travail de votre projet, vous vous retrouvez avec la cible du projet Xcode et ces cibles Pods que vous avez implémentées dans le même fichier. Ce qui se passait, c'était qu'une partie du .m était utilisée par les deux. Après avoir supprimé les doublons pour la cible Xcode dans Build Phases >> Compile Sources, cela a bien fonctionné.
la source
J'ai découvert ce message TRÈS trompeur en essayant de passer à la nouvelle bibliothèque Google Analytics.
Dans mon cas, le problème était d'avoir DEUX COPIES CONFLITANTES de la bibliothèque. Ils se trouvaient dans des dossiers différents, mais les deux étaient répertoriés dans les chemins de génération de bibliothèque de mon application (sous Paramètres de génération).
Le déplacement de tous les fichiers de bibliothèque obsolètes hors du dossier a fini par faire l'affaire et a fait disparaître les mystérieux messages d'erreur.
la source
Vérifiez que toutes vos ressources de bundle sont copiées en phase de génération.
la source
Produit => Clean a fait l'affaire pour moi
la source
Le changement dans l'architecture active a fonctionné pour moi, une de mes bibliothèques utilisait i386.
Dans les paramètres de build >> changer Build Active Architecture Only à Yes de NO
Ça a marché pour moi. J'espère que cela aide aussi les autres.
la source
La réponse est que vous faites simplement glisser-déposer le dossier sur le projet et cliquez sur copier.
la source
J'ai reçu ce message lorsque je glissais et déposais des fichiers source d'un autre projet. Lorsque je les ai supprimés puis ajoutés via le menu "Ajouter des fichiers ..." dans le menu Fichier, il a été construit sans l'erreur.
la source
J'ai eu une erreur similaire avec NSManagedObject et c'est parce que j'utilisais Core Data mais qu'il manquait le framework Core Data dans Build Phases - Link Binary With Libraries, comme d'autres l'ont répondu
la source
Vous pouvez obtenir ce type d'erreur si vous ajoutez des bibliothèques tierces dans votre projet qui nécessitent des frameworks natifs non inclus dans votre projet.
Vous devez regarder à l'intérieur des fichiers .h et .m de votre bibliothèque nouvellement ajoutée et voir quels cadres elle nécessite, puis inclure ces cadres dans votre projet (Cible> Phases de construction> Lier le binaire aux bibliothèques).
la source
Essayez de supprimer le framework, de nettoyer le projet, de le rajouter et de le compiler. Ou Supprimez la classe qui a été ajoutée par xcode dans la source de compilation, nettoyez le projet, ajoutez-la puis construisez.
la source
N'oubliez pas que vous pouvez mettre une macro dans n'importe quel contrôleur de vue qui appelle les fichiers que vous avez déjà supprimés.
L'application ne montrera aucune erreur tant que vous n'aurez pas créé votre application, elle lancera l'erreur en phase de compilation dans les fichiers .o.
N'oubliez pas de supprimer toute MACRO qui appelle des fichiers que vous avez déjà supprimés.
Merci :)
la source
En plus de ce qu'Allan a fait, en ajoutant des classes manquantes, j'ai suivi la solution de @ emdog4 et ajouté la bibliothèque Core Data en allant dans Build Phases in Xcode et sous le 'Link Binary with Libraries' en cliquant sur le + et en sélectionnant le 'CoreData.framework' . Cela a réglé mon erreur
la source