Erreurs de construction XCTest pour la cible de test Xcode 5:

J'ai mis en place un projet XCode 5 iOS 7 pour les tests unitaires.

Bien sûr, la mise en place des tests unitaires me prend tellement de time que j'essaie de garder la foi que ça vaut le coup. Luttant pendant des heures sur cette erreur:

ld: building for iOS Simulator, but linking against dylib built for MacOSX file '/Applications/Xcode5-DP5.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest' for architecture i386 

Des idées sur la façon de résoudre?

Vérifiez vos paths de search d'infrastructure dans vos parameters de cible de test. Ceux-ci peuvent être corrompus lors de l'ajout du Framework XCTest.

L'ajout de XCTest à l'un de mes projets ajoutait un "/" aux paths, ce qui les empêchait de find la bonne version.

Aucune des réponses ci-dessus n'a fonctionné pour moi. J'ai trouvé une réponse ici dans un commentaire laissé par Tim Macfarlane.

Pour les erreurs d'éditeur de liens qui searchnt une class dans votre application … définissez le paramètre de construction "Symboles masqués par défaut" sur "NON" dans la cible de votre application. Cela rend toutes vos classs d'applications disponibles automatiquement pour votre cible de test …

Donc ça signifie:

  • Project Navigator> Sélectionnez votre projet
  • Cibles> Sélectionnez votre application (pas de tests)
  • Paramètres de construction> Rechercher "Symboles masqués par défaut"
  • "Symboles cachés par défaut"> Changer de "OUI" à "NON"

J'ai eu le même problème; le problème (pour moi, au less) était que le paramètre de construction FRAMEWORKS_SEARCH_PATHS répertoriait le dossier SDK frameworks après le dossier principal des frameworks de développement.

Les frameworks inclus avec Xcode ont trois versions distinctes: une pour OS X, une pour iOS (périphérique) et une troisième pour le simulateur iOS. La construction OS X se trouve dans le dossier développeur principal, les deux autres étant sous leurs dossiers de plate-forme respectifs. Le problème ici est que si vous ne spécifiez pas d'abord de searchr dans les dossiers du SDK (qui se trouvent dans les dossiers de la plate-forme), Xcode (ou plus exactement l'éditeur de liens) finda la compilation OS X en premier et produira l'erreur que vous voyez.

La solution est simple, mettez:

 FRAMEWORK_SEARCH_PATHS = $(SDKROOT)/Developer/Library/Frameworks $(inherited) 

dans vos parameters de construction. Si vous mettez des parameters de construction dans le file de projet (je ne le recommand pas, mais c'est une autre question pour un autre jour), il est juste nommé "paths de search de cadre".

NOTE: Parfois, Xcode est un peu lent à attraper; vous aurez probablement besoin de supprimer votre dossier de build (mieux que juste un nettoyage) pour que cela prenne effet.

Avoir le même problème après la conversion des tests de SenTestCase en XCTestCase. Rétablissement des problèmes de dirs d'environnement:

 "$(SDKROOT)/Developer/Library/Frameworks" (non-recursive) "$(DEVELOPER_LIBRARY_DIR)/Frameworks" (non-recursive) 

Donc, pour moi, ce qui me manquait après avoir essayé tout le rest dans ce post, était:

Autres drapeaux de lieur:

-framework XCTest

J'utilise actuellement Xcode 6.0 (avec le SDK iOS 8) et je suis surpris que l'option "Edition> Refactoriser> Convertir en XCTest …" n'ajoute pas automatiquement cette option.

J'étais confronté à un problème lors de l'ajout de framework sendestingkit dans xcode 5. Ces parameters ont fonctionné pour résoudre le problème du lieur. Chemins de recherche

J'ai eu ce problème en ajoutant un autre file pour les tests. Si vous faites cela avec (CMD + N) assurez-vous de ne cibler que l'set de test (c'est-à-dire 'AppNameTests').

Je suppose que seuls ces bundles .xctest ont access au Framework XCTest.

J'ai eu le même problème après avoir renommé mon nom de cible et déplacé des choses. Il s'est avéré que mes tests faisaient partie de ma cible principale. Assurez-vous que tous vos files de test n'appartiennent qu'à votre cible de test.

Sélectionnez simplement un file .m, assurez-vous que le volet droit est ouvert.

Image cible du test XCode

J'ai eu le même problème quand j'ai essayé de build des tests unitaires basés sur XCTTest avec SDK pré-7.0. Lorsque j'ai choisi 7.0 comme SDK de base, ce type d'erreur de lien a disparu.

Avait le même problème mais a fini avec une solution légèrement différente.

select XCTest.framework et assurez-vous que seul votre dossier de test est coché sous Membership cible.

Adhésion cible

Assurez-vous que le path du cadre de search (FRAMEWORK_SEARCH_PATHS) pour la cible YourProjectTests inclut le path $(SDKROOT)/Developer/Library/Frameworks , et que celui-ci est répertorié avant $(inherited) .

Dans mon cas, les deux paths étaient présents, mais $(inherited) était le premier.

Le crédit va à https://stackoverflow.com/users/181947/brian-clear sur l' avertissement de l'éditeur de liens Apple Mach-O (id): build pour MacOSX, mais créer un lien avec dylib construit pour iOS