244 votes

Symboles non définis pour l'architecture i386 : _OBJC_CLASS_$_SKPSMTPMessage", référencé par : error

J'ai importé un framework pour envoyer des emails à partir d'une application en arrière-plan. SKPSMTPMessage Le cadre. Quelqu'un peut-il me dire pourquoi l'erreur suivante s'affiche ?

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

Mise à jour :

Answer:Il suffit de glisser-déposer le dossier sur le projet et de cliquer sur copier. Cela permet de sélectionner la case à cocher du projet et la case à cocher de la cible.

0 votes

Après avoir ajouté SystemConfiguration.framework de phases de construction mon projet se compile bien

0 votes

J'ai résolu ce problème en ajoutant le cadre requis pour lier le binaire aux bibliothèques.

570voto

Allen Pike Points 4806

Vous pouvez obtenir ce type d'erreur si le fichier .m de votre classe n'est pas listé dans l'étape "Compile Sources" de l'onglet "Build Phases" de votre cible. Normalement, Xcode le fait pour vous, mais il arrive qu'il perde le fil et que vous deviez ajouter le fichier .m manuellement.

Pour ce faire :

TargetSettings -> Build Phases -> Compile Sources -> ajoutez votre classe .m ->Build and Run

49 votes

Parfois, ces erreurs apparaissent parce qu'un cadre n'est pas lié correctement. Il suffit de vérifier tous les frameworks dans "Link Binary With Libraries" dans l'onglet build-phase du projet.

0 votes

Cela peut également se produire avec les fichiers .c, et probablement aussi avec les fichiers .mm.

0 votes

Rajneesh, avez-vous résolu le problème ? Si oui, comment l'avez-vous résolu ?

37voto

verma Points 416

Pour moi, le problème s'est avéré être l'absence de cadres. Une fois que je les ai ajoutés, cela a fonctionné.

0 votes

Cela m'a semblé un peu long car cela ne correspondait pas vraiment aux messages d'erreur que j'obtenais, mais l'ajout des frameworks dépendants suggérés sur le site de SocketRocket a également résolu le problème pour moi.

0 votes

Même si vous ajoutez des cadres par le biais de cocoapodes cela peut arriver. J'ai également dû l'ajouter manuellement en tant que cadre. Je vous remercie.

0 votes

Le Framework que j'ai ajouté devait être complété par d'autres Frameworks avant d'être construit. Si vous ajoutez un Framework, vérifiez que vous avez ajouté tous les Frameworks dont il pourrait avoir besoin

29voto

Akshay Points 4691

Vérifiez les propriétés Architectures valides et Construire une architecture active uniquement.

enter image description here

1 votes

Pouvez-vous me dire comment ouvrir cette fenêtre d'option dans Xcode 4.2 ?

0 votes

Si cela ne vous aide pas, consultez la réponse d'Allen Pike ci-dessous.

0 votes

Cette réponse et celle d'Allen m'ont toutes deux aidé. J'ai vraiment dû vérifier les deux choses : Compiler les sources et Construire l'architecture active uniquement. Merci beaucoup les gars !

10voto

Owen Hartnett Points 4060

Votre framework est-il compilé pour armv(x) ? Il me semble qu'il est compilé pour i386, ce qui ne fonctionnera pas sur un appareil iOS. Ou bien il est compilé pour armv(x) et vous essayez de le faire tourner sur le simulateur, ce qui est du code i386. Assurez-vous, en utilisant les paramètres de compilation affichés par Akshay ci-dessus, que votre framework est correctement compilé pour la puce sur laquelle vous allez l'exécuter.

0 votes

C'est réglé. J'ai dû glisser et déposer le forder du framework dans le forder de mon projet dans xCode. Merci de votre compréhension.

0 votes

Est-il possible de compiler un framework pour qu'il fonctionne simultanément sur l'appareil iOS et sur le simulateur ? ou dois-je toujours choisir une seule option ?

0 votes

Parlez-vous d'ouvrir deux fenêtres sur le même projet, et d'en configurer une pour qu'elle s'exécute sur le simulateur et une autre sur l'appareil ?

7voto

star18bit Points 1004

Si vous importez un autre projet dans xcode et si le projet actuel et le projet importé ont les mêmes fichiers dans la source du compilateur, il suffit de supprimer le même fichier dans le projet actuel dans les paramètres de la "phase de construction". Cela a fonctionné pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X