J'ai importé un cadre pour l'envoi d'e-mails à partir d'une application en arrière-plan, c'est-à-dire 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 d'où provient le cadre: -
Verrouillage des champs dans MFMailComposeViewController
Mettre à jour:
Réponse: glissez et déposez le dossier sur le projet et cliquez sur copier. Thats it select case à cocher projet et case à cocher cible également.
Vous pouvez obtenir ce type d'erreur si le fichier .m de votre classe ne figure pas dans l'étape "Compiler les sources" de l'onglet "Créer 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 -> Construire les phases -> Compiler les sources -> Ajouter votre classe .m -> Construire et exécuter
pour moi le problème s'est avéré être des cadres manquants. Une fois que j'ai ajouté em, cela a fonctionné.
Vérifiez les propriétés Valid Architectures & Build Active Architecture uniquement.
Votre framework est-il compilé pour armv (x)? Il me semble avoir été compilé pour i386, code qui ne fonctionnera pas sur un appareil iOS. Sinon, il est compilé pour armv (x) et vous essayez de l'exécuter sur le simulateur, qui est du code i386. Assurez-vous, à l'aide des paramètres de construction Akshay affichés ci-dessus, que votre infrastructure est correctement compilée pour la puce sur laquelle vous allez l'exécuter.
Si vous importez un autre projet dans xcode et si le projet actuel et le projet d'importation ont tous deux le même fichier dans la source du compilateur, supprimez simplement le même fichier du projet actuel dans les paramètres de "Phase de construction".
Oui, cela est lié à ce que dit Allen ... Recherchez TargetMembership dans la section Utilitaires du fichier source. une case à cocher associe ce fichier à un projet. Vérifier cela a résolu ce problème pour moi aussi.
essayez celui-ci en dernier:
j'ai donc essayé toutes les suggestions de cette page. Aucune n'a fonctionné. Mon problème a commencé par suivre les étapes décrites dans this qui explique comment lier des bibliothèques statiques. Avec mon exemple de projet, les instructions ont bien fonctionné .. mais ensuite, sur mon projet actuel, j'ai commencé à avoir l'erreur ci-dessus.
Donc, ce que j’ai fait, c’est de parcourir chaque étape du tutorial et de le construire après chaque étape .. la ligne incriminée s’est avérée être celle-ci: ajout de -all_load pour construire les paramètres-> autres drapeaux de l’éditeur de liens
il est apparu que ce drapeau était recommandé il était une fois de lier des catégories à des bibliothèques statiques .. mais ensuite il s'est avéré que ce drapeau n'était plus nécessaire -force_load flag .. qui était également recommandé dans d'autres posts ) ..
Quand j'ai rencontré le même problème que cela:
Symboles non définis pour l'architecture i386:
_OBJC_CLASS _ $ _ SKPSMTPMessage, référencé depuis: objc-class-ref dans ConfirmController.o
Il s'est avéré que j'ai juste oublié d'ajouter un cadre. C'était QuartzCore.framework pour être exact.
Il se peut également que vous manquiez de lien avec une bibliothèque binaire, cochez Build Phases dans vos targes, ajoutez les bibliothèques requises, puis Product> Clean Product> Build.
Cela doit fonctionner aussi!
J'ai également rencontré ce problème et je l'ai corrigé en vérifiant si la source compilée et le lien binaire avec bibliothèque contenaient tous les fichiers/bibliothèques/frameworks requis.
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 était cloné à partir d'une URL Git.
'Produit'> 'Nettoyer' a résolu le problème.
Ajouter ce qui a fonctionné pour moi au cas où d’autres auraient le même problème et se retrouveraient ici. J'avais un projet plus ancien pour lequel le paramètre CLANG_ENABLE_MODULES était défini sur Non. Après des heures de frustration, je l'ai comparé à un projet en cours de travail et constaté que le paramètre Activer le jeu de modules était défini sur Non dans les paramètres de génération de ma LLVM. La définition de ce paramètre sur Oui a résolu mon problème et l'application est correctement construite.
Paramètres du projet -> Paramètres de construction -> recherchez "Modules" et mettez à jour les modules d'activation (C et Objective-C) sur YES.
Quand 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 Target Dependency dans les phases de construction, mais nous oublions d'ajouter "bibliothèque compilée" dans Link Binary avec des bibliothèques dans les phases de construction.
Je n'ai pas ajouté le "-all_load -lstdc ++" à Other Linker Flags dans le paramètre de construction et j'ai pu lancer la sim sans erreur, mais je n'ai pas obtenu la sortie du journal MonkeyTalk au lancement et le script précédent que j'avais utilisé pour se connecter. maintenant montré le bouton de lecture comme désactivé. La sortie de MT IDE indiquait "Connexion configurée sur iOS Simulator", mais impossible de sélectionner le bouton Exécuter/Lire.
Le projet d'origine contenait "ObjC -all_load" dans les autres drapeaux de l'éditeur de liens et, lorsque j'ai ajouté "-all_load -lstdc ++", j'ai reçu le message d'erreur relatif à ce message. Lorsque j'ai supprimé "ObjC -all_load" et ajouté uniquement "-all_load -lstdc ++", le projet a été construit, mais toujours pas de déconnexion de singe mis en tant que confirmation dans la console
Il est possible que vous utilisiez une bibliothèque compilée uniquement pour du matériel REAL. Par exemple, si vous utilisez une bibliothèque Bluetooth telle que la Zephyr HxM Smart, celle-ci ne sera probablement pas compilée sur le simulateur et ne doit fonctionner que sur de vrais périphériques.
j'ai le même problème avec 7 erreurs lorsque j'ajoute PSTCollectionviewcontroller. La seule solution à ce problème est de vérifier votre "xcode -> phases de construction -> sources de compilation" ajoutez ici tous vos fichiers ".m" ..J'espère que vous post aidera les utilisateurs à l'avenir.
Produit => Clean a fait le tour pour moi
A rencontré un problème similaire avec IOS 6 . Il a été possible de le résoudre en ajoutant storekit.framework à "Link Binary with Libraries" dans la section des phases de construction.
Maintenant, cela fonctionne comme un charme.
Vérifiez que toutes vos ressources d'ensembles sont copiées lors de la phase de construction.
J'ai découvert ce message extrêmement trompeur lors d'une tentative de mise à niveau vers la nouvelle bibliothèque Google Analytics.
Dans mon cas, le problème était d'avoir DEUX COPIES CONFLICANTES de la bibliothèque. Ils se trouvaient dans des dossiers différents, mais les deux étaient répertoriés dans les chemins de construction de la bibliothèque de mon application (sous Paramètres de construction).
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.
Sur le mien, j’utilisais Cocoapods pour un projet de réalité augmentée et j’ai découvert que lorsque vous implémentez des cocoapods et ouvrez le fichier .workspace de votre projet, vous vous retrouvez avec la cible Xcode Project et les cibles que vous avez implémentées dans le même fichier. Ce qui se passait, c’est que certains des fichiers .m étaient utilisés par les deux. Après avoir supprimé les doublons pour la cible Xcode dans Build Phases >> Compile Sources, cela a bien fonctionné.
Vous pouvez obtenir ce type d'erreur si vous ajoutez des bibliothèques tierces dans votre projet nécessitant 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 sont les frameworks nécessaires, puis inclure ces frameworks dans votre projet (Cible> Build Phases> Lier les fichiers binaires aux bibliothèques).
Dans mon cas c'était un peu différent
Dans l’en-tête du préfixe, il y avait une définition manquante
#ifdef DEBUG
# define TWDLog(fmt, ...) NSLog((@"\n%s\n" fmt), __PRETTY_FUNCTION__, ##__VA_ARGS__)
#else
# define TWDLog(...)
#endif
Donc, recherchez PROJECTNAME-Prefix.pch
et vérifiez s’il manque quelque chose dans les deux projets
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 par le biais de la commande "Ajouter des fichiers ..." du menu "Fichier", il s'est construit sans l'erreur.
J'ai eu une erreur similaire avec NSManagedObject et c'était parce que j'utilisais Core Data, mais il manquait l'infrastructure Core Data dans les phases de construction - Lien binaire avec bibliothèques, comme d'autres l'ont répondu
Essayez de supprimer le cadre, de nettoyer le projet, de le rajouter et de le compiler. Or Supprimez la classe qui a été ajoutée par xcode dans la source de compilation, nettoyez projet, ajoutez-la en arrière, puis générez.
J'ai le même problème. Et j'ajoute 2 framework dont j'ai besoin pour construire les phases .......
La réponse est que vous venez de glisser-déposer le dossier sur le projet et cliquez sur copier.
N'oubliez pas que vous pouvez placer 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 jusqu'à ce que vous la construisiez, elle lancera l'erreur en phase de compilation dans des fichiers .o.
N'oubliez pas de supprimer toute MACRO qui appelle des fichiers que vous avez déjà supprimés.
Merci :)
En plus de ce qu'Allan a fait, en ajoutant les classes manquantes, j'ai suivi la solution de @ emdog4 et ajouté la bibliothèque Core Data en accédant à Build Phases dans Xcode et sous "Lien binaire avec bibliothèques" en cliquant sur le + et en sélectionnant "CoreData.framework" . Cela a réglé mon erreur
Dans mon cas, la mise à jour du pod n'a pas mis à jour le projet d'une manière ou d'une autre. J'ai donc dû le faire moi-même, en ajoutant le MBProgressHud à OtherLinkerFlags.
Aucune des réponses ci-dessus n'a résolu mon problème. J'ai eu la même erreur quand, après avoir mis à niveau Xcode vers 8, je suis allé à Target -> Build Phases -> Le lien binaire avec les bibliothèques et à supprimer la structure à l'origine du problème. et re l'a ajouté et toutes les erreurs ont disparu. J'espère que cela aidera les autres .