symbole en double _OBJC_METACLASS _ $ _ ClassName

J’essaie de lancer mon application cocos2d et de faire face à cette erreur, car j’ai récemment mis à niveau mon SDK vers 4.2 et mon cocos2d vers la version 0.99.5.

J’ai essayé de nettoyer mon projet et même de changer le déploiement de Target ios, mais l’erreur rest la même. Renommez également le className pour éviter la duplication des noms de classes Library de cocos2d.

ld: symbole dupliqué _OBJC_METACLASS _ $ _ MenuSceneNew dans / Users / umaidsaleem / Desktop / fonctionnalitéTest / build / Debug-iphonesimulator / libcocos2d libraries.a (MenuScene.o) et /Users/umaidsaleem/Desktop/functionalityTest/build/functionalityTest.build/Debug- iphonesimulator / fonctionnalitéTest.build / Objects-normal / i386 / MenuScene.o

Vous liez le fichier MenuScene.m deux fois. Vous l’avez apparemment dans une bibliothèque statique et dans votre application principale.

Une autre chose assez simple à vérifier est que vous n’avez pas accidentellement .m un fichier .m au lieu d’un fichier d’en-tête .h .

Qui m’est arrivé.

Une autre raison pour cela, pour ceux qui ont fait la même chose que je viens de faire, est peut-être que vous avez recréé une classe d’objects gérés. En faisant cela et en choisissant un autre groupe dans la structure du projet, vous créez accidentellement une autre référence aux mêmes fichiers.

J’ai fini avec deux références pour l’en-tête et l’implémentation à la fois dans la racine du projet et dans mon groupe de modèles. La suppression des références les plus hautes aux fichiers .h et .m a permis d’éliminer l’échec de la liaison.

Parfois, Core Data insère AnyProjectNameModel.xcdatamodeld dans les sources de compilation des phases de génération. Vérifiez-le et supprimez-le et tout est exécuté à nouveau … Le message d’erreur indique simplement les objects ManagedObjects générés … L’emplacement correct pour AnyProjectNameModel.xcdatamodeld est les ressources Copy Bundle dans les phases de génération. entrer la description de l'image ici

Vérifiez les sources de compilation de votre cible et voyez si un fichier class.m est inclus deux fois

Une erreur stupide que j’ai faite est que j’ai nommé ma mise en œuvre identique à ma super-classe.

Dans le .h

 @interface Subclass : Superclass @end 

Dans le .m

 #import "Subclass.h" @implementation Superclass @end 

Aucune des suggestions habituelles de Google ne semblait aider, donc si quelqu’un est aussi fou ou fatigué que moi (peut-être un mélange sain des deux), assurez-vous de ne pas dupliquer une mise en œuvre!

Dans mon cas, cela était dû au fait que Xcode générait automatiquement ma classe NSManagedObject, qui était alors en conflit avec ma classe NSManagedObject créée manuellement. Dans ce cas, vous pouvez définir “Codegen” sur “Manual / None” dans l’inspecteur de modèles de données pour votre entité nouvellement créée.

J’ai également eu cette erreur particulière lorsqu’un fichier qui n’a pas été ajouté au projet, est référencé quelque part dans le projet. Les deux cas où j’ai vécu ceci sont ceux où j’ai supprimé / supprimé des fichiers du projet sans en supprimer les références et lorsque je travaillais en coopération sur un projet où un coéquipier avait ajouté la référence mais je n’ai pas ajouté le fichier à ma version du projet. projet.

Je sais que le PO a résolu leur problème, mais je pensais que cela pourrait aider quelqu’un qui lit cette question en cherchant de l’aide.

Une autre chose à vérifier pour la double liaison – il est possible d’avoir le même fichier à deux endroits différents dans la liste de fichiers sur la gauche. Ensuite, le compilateur le comstack et le lie deux fois.

Cela se produit par exemple lors de l’organisation de la hiérarchie de vos fichiers.

Vous n’avez pas besoin de créer une bibliothèque ou quelque chose de spécial – faites simplement glisser un fichier .m vers deux emplacements différents dans l’arborescence du projet.

N’oubliez pas de ne supprimer que la référence à l’un d’entre eux, aucune corbeille de fichier n’est nécessaire.

Pour moi, le fait de supprimer -all_load de ‘Other Linker Flags’ a résolu le problème.

J’ai trouvé la solution moi-même, désolé d’avoir posté un peu de retard. Toute assistance est très appréciée, mais le problème survient lorsque j’ajoute une nouvelle bibliothèque statique CCLayer et une bibliothèque statique checkmark cocos2d 0.99.5 qui était incorrecte. Ensuite, je ré-annonce ma classe sans vérifier et nettoyer mes cibles et ensuite construire et partir. Problème résolu maintenant.

XCode Beta est tombé en panne pour moi lors de la suppression d’une référence à une classe. Cela a causé le problème décrit dans la réponse, le correctif était différent à nouveau.

Lors de la phase de construction de ma cible, sous “Comstackr les sources”, l’élément qui me causait du chagrin était rouge. Je ne pouvais pas le supprimer avec le bouton moins, mais en tapant “skip” dans les drapeaux du compilateur, la classe rouge disparaissait après le rechargement du projet. Je suppose que vous pourriez taper quelque chose ici.

Il m’a fallu deux heures pour trouver la solution à mon problème, je l’ai mis ici pour une autre option pour ceux qui ont ce problème, bien que cela ne soit probablement pas courant.

Aucune des réponses n’a fonctionné pour moi, alors ce que j’ai fait a été de supprimer les fichiers du projet et de choisir uniquement Supprimer les références.

Ensuite, j’ai ajouté les mêmes fichiers et cela a fonctionné.

Cela a corrigé mon erreur. Peut-être que XCode a perdu des références stockées quelque part puisque le projet est multi-collaboration.

J’espère que ça aide quelqu’un.

Une autre possibilité d’erreur comme celle-ci se produit lors d’une collision de noms de classes. Soit 2 classes avec le même nom dans votre projet ou une classe de votre projet en conflit avec une autre définie dans certaines bibliothèques de dépendances.

Retirez la cible du panneau de droite et ajoutez à nouveau la cible. Cela supprimera toutes les références en double. Il peut arriver que 2 programmeurs ajoutent la même cible et valident le fichier du projet.

Dans mon cas, j’utilisais une bibliothèque binary incluant le même nom de classe que j’utilisais à l’extérieur, donc j’ai changé le nom de ma classe et ça fonctionne très bien 🙂

J’ai eu un projet avec 2 cibles. Une cible nommée Component et le second nommé Sample. Sample utilisait un composant comme bibliothèque de liens. Ensuite, Component utilisait un pod nommé MyPod (installé avec cocoapod).

Le Podfile a été écrit comme ceci:

 def shared_pods pod 'MyPod' end target 'Component' do shared_pods end target 'Sample' do shared_pods end 

Les deux cibles faisaient référence à la liste de modules partagés. Lors de la construction de la cible du composant, aucun problème n’apparaît, mais lors de la construction de l’exemple, j’obtiens un symbole en double _OBJC_METACLASS _ $ _ ClassName. J’ai changé le Podfile pour:

 def shared_pods # empty end target 'Component' do pod 'MyPod' shared_pods end target 'Sample' do shared_pods end 

Et cela résout le problème. 3 heures passées, j’espère sauver du temps.