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

J'ai importé la structure pour l'envoi d'email à partir de l'application en arrière-plan, c'est-à-dire SKPSMTPMessage Framework. Quelqu'un peut-il suggérer pourquoi l'erreur ci-dessous est montré

 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 pris: –

Verrouiller les champs dans MFMailComposeViewController

Mise à jour :

Réponse: Faites simplement glisser le dossier sur le projet et click copyr. C'est-à-dire, select la checkbox du projet et la checkbox de la cible.

Vous pouvez get ce type d'erreur si le file .m de votre class n'est pas répertorié sous l'étape "Comstack Sources" de l'onglet "Build Phases" de votre cible. Normalement, Xcode le fait pour vous, mais parfois il perd l'insortinggue et vous devez append le file .m manuellement.

Pour faire ça:

TargetSettings -> Construire les phases -> Comstackr les sources -> append votre class .m -> Construire et exécuter

pour moi, la question s'est avérée manquer de frameworks. Une fois que je l'ai ajouté, ça a marché.

Cochez les propriétés Valid architectures & Build Active Architecture uniquement.

entrez la description de l'image ici

si vous utilisez des cocoapodes, assurez-vous que les parameters de construction de votre cible contiennent $ (hérité) dans l' autre section des indicateurs de liens

entrez la description de l'image ici

Votre framework est-il compilé pour armv (x)? Il me semble que c'est compilé pour i386, quel 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 parameters de construction d'Akshay affichés ci-dessus, que votre framework est correctement compilé 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'import ont tous deux les mêmes files dans la source du compilateur, supprimez simplement le même file dans le projet en cours dans les parameters "Phase de construction".

Ouais c'est lié à ce qu'allen a dit … Recherchez la section TargetMembership dans Utilities du file source. une checkbox associe ce file à un projet. En vérifiant cela a résolu ce problème pour moi aussi.

Il se peut aussi que vous manquiez d'un lien vers une bibliothèque binary, que vous cochiez Build Phases dans vos Targes, ajoutez les bibliothèques requirejses, puis Product> Clean Product> Build

Cela doit aussi fonctionner!

J'ai eu ce problème quand 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.

'Product'> 'Clean' a résolu le problème.

J'ai également rencontré ce problème et je l'ai corrigé en vérifiant si les deux comstacknt source et lien binary avec la bibliothèque contenait tout le file / bibliothèque / framework dont j'avais besoin.

entrez la description de l'image ici

Quand j'ai rencontré le même problème que celui-ci:

Symboles non définis pour l'architecture i386:

_OBJC_CLASS _ $ _ SKPSMTPMessage, référencé par: objc-class-ref dans ConfirmController.o

Il s'est avéré que j'ai juste oublié d'append un cadre. C'était QuartzCore.framework pour être exact.

essayez celui-ci en dernier:

donc j'ai essayé toutes les suggestions sur cette page .. aucun travaillé .. La façon dont mon problème a commencé était en suivant les étapes de ce tutoriel qui enseigne comment lier les bibliothèques statiques. Avec mon exemple de projet, les instructions fonctionnaient bien … mais sur mon projet actuel, j'ai commencé à avoir l'erreur ci-dessus.

Donc ce que j'ai fait était de passer par chaque étape de ce tutoriel et construit après chaque étape .. la ligne fautive s'est avérée être celle-ci: append -all_load pour build les parameters-> autres indicateurs de liens

il s'avère que ce drapeau a été 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+ .. (même chose pour le drapeau -force_load .. qui était aussi recommandé dans d'autres messages ) ..

Quand j'ai rencontré le même problème, j'ai oublié d'append "version compilée de la bibliothèque (avec extension .a)". Normalement, nous ajoutons la librairie du projet importé dans Target Dependency dans Build Phases mais nous oublions d'append "library compilé" dans Link Binary avec Libraries dans Build Phases.

Ajoutant ce qui a fonctionné pour moi au cas où d'autres ont le même problème et se retrouvent ici. J'avais un projet plus ancien qui avait le paramètre CLANG_ENABLE_MODULES réglé sur Non. Après des heures de frustration, j'ai comparé un projet en cours et j'ai trouvé que j'avais Activer les modules mis à non dans mes parameters de construction LLVM. Définir cela sur Oui a résolu mon problème et l'application se construit bien.

Paramètres du projet -> Paramètres de construction -> Rechercher "Modules" et Mettre à jour les modules d'activation (C et Objective-C) sur YES.

Je n'ai pas ajouté le "-all_load -lstdc ++" à d'autres indicateurs de liens dans le paramètre de construction et j'ai été capable de lancer la simulation sans erreur mais je n'ai pas reçu la sortie du journal MonkeyTalk et le précédent script que j'ai écrit maintenant montré le button de lecture comme désactivé. La sortie de l'IDE MT a montré "Connection set to iOS Simulator", mais n'a pas pu sélectionner le button run / play.

Le projet original avait "ObjC -all_load" dans les autres drapeaux de lieur et quand j'ai ajouté le "-all_load -lstdc ++" avec cela, j'ai reçu le message d'erreur de ce post. Quand j'ai enlevé le "ObjC -all_load" et seulement ajouté le "-all_load -lstdc ++" le projet construit, mais toujours pas de singe talk log out mis comme 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 comme Zephyr HxM Smart, elle ne sera probablement pas compilée sur le simulateur et ne fonctionnera que sur de vrais appareils.

Ran dans un problème similaire avec IOS 6. A été en mesure de 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.

J'ai le même problème avec 7 erreurs quand j'ajoute PSTCollectionviewcontroller. Une solution pour ce problème est de vérifier votre "xcode -> phases de construction -> comstackr les sources" ici append tous vos files ".m" .. J'espère que vous postr aidera les users à l'avenir.

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 cocoapodes et ouvrez l'espace .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 file. Ce qui se passait, c'était que certains des .m étaient utilisés par les deux. Après avoir supprimé les duplicates pour la cible Xcode à Build Phases >> Comstack Sources, cela a bien fonctionné.

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 copys de la bibliothèque. Ils se trouvaient dans des dossiers différents, mais tous deux étaient répertoriés dans les paths de création de bibliothèque de mon application (sous Paramètres de construction).

Déplacer tous les files de bibliothèque obsolètes hors du dossier a fini par faire l'affaire et a fait disparaître les messages d'erreur mystérieux.

Vérifiez que toutes les ressources de votre bundle sont copiées en phase de construction.

Produit => Clean a fait l'affaire pour moi

La réponse est que vous venez de faire glisser et déposer le dossier sur le projet et click copyr.

J'ai reçu ce message lorsque j'ai glissé et déposé des files sources d'un autre projet. Lorsque je les ai supprimés, puis ajouté par l'intermédiaire du "Ajouter des files …" dans le menu Fichier, il construit sans erreur.

J'ai eu une erreur similaire avec NSManagedObject et c'était parce que j'utilisais des données de base mais manquais le cadre de données de base dans des phases de construction – lien binary avec des bibliothèques, comme d'autres ont répondu

Vous pouvez get 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 files .h et .m de votre bibliothèque nouvellement ajoutée et voir les frameworks dont elle a besoin, puis inclure ces frameworks dans votre projet (Cible> Build Phases> Link Binary With Libraries).

Essayez de supprimer le cadre, de nettoyer le projet, de le rappend et de le comstackr. Ou Supprimez la class qui a été ajoutée par xcode dans la source de compilation, nettoyez le projet, ajoutez-le à nouveau puis build.

Rappelez-vous que vous pouvez mettre une macro dans n'importe quel controller de vue qui appelle les files que vous avez déjà supprimés.

L'application ne montrera aucune erreur jusqu'à ce que vous construisez votre application, il jettera l'erreur dans la phase de compilation dans les files.

N'oubliez pas de supprimer toute MACRO qui appelle des files que vous avez déjà supprimés.

Merci 🙂

En plus de ce qu'Allan a fait, en ajoutant des classs manquantes, j'ai suivi la solution de @ emdog4 et ajouté la bibliothèque Core Data en allant dans Build Phases dans Xcode et sous le lien Link Binary with Libraries en cliquant sur le + et en sélectionnant CoreData.framework . Cela a résolu mon erreur

Dans mon cas c'était un peu différent

Dans l'en-tête de 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 

Alors PROJECTNAME-Prefix.pch et vérifiez si quelque chose manque dans les deux projets