web-dev-qa-db-fra.com

Symboles non définis pour l'architecture i386: _OBJC_CLASS _ $ _ SKPSMTPMessage ", référencé depuis: erreur

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.

227
Mann

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

565
Allen Pike

pour moi le problème s'est avéré être des cadres manquants. Une fois que j'ai ajouté em, cela a fonctionné. 

37
verma

Vérifiez les propriétés Valid Architectures & Build Active Architecture uniquement.

enter image description here

28
Akshay

si vous utilisez des cocoapodes, assurez-vous que les paramètres de construction de votre cible contiennent $ (hérité) dans la section other linker flags.

 enter image description here

17
Tim

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.

10
Owen Hartnett

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

7
star18bit

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. 

4
yeahdixon

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 ) .. 

4
abbood

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.

4
Mitch Viray

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!

4
Gabriel Ramirez

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.

enter image description here

4
yujohnnyzhou

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.

4
kraftydevil

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.

3
jlichti

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.

3
Balamurugan

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

2
JJacquet

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.

2
DiscDev

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.

1
Naveen

Produit => Clean a fait le tour pour moi

1
YogevSitton

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. 

1
Troy

Vérifiez que toutes vos ressources d'ensembles sont copiées lors de la phase de construction.

1
Arpan Dixit

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.

1
bkbeachlabs

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é.

1
Joao Paulo

Le changement d’architecture active a fonctionné pour moi, une de mes bibliothèques utilisait i386.

Dans , définissez les paramètres >> et remplacez uniquement l'architecture active par Oui de NON

Cela a fonctionné pour moi. J'espère que cela aide aussi les autres.

enter image description here

1
Satish Mavani

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).

0
Cosmin

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

0
Shereef Marzouk

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.

0
RyeMAC3

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

0
Sam

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.

0
Saif

J'ai le même problème. Et j'ajoute 2 framework dont j'ai besoin pour construire les phases .......symbol(s) not found for architecture i386

0
777Q

La réponse est que vous venez de glisser-déposer le dossier sur le projet et cliquez sur copier. 

0
Mann

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 :) 

0
Abo3atef

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

0
malkoty

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.

enter image description here

0
Naloiko Eugene

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 .  enter image description here

0
Aviva