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 temps que j'essaie de garder la foi que cela en vaut la peine. 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 chemins de recherche de framework dans vos paramètres de cible de test. Ceux-ci peuvent être corrompus lors de l'ajout du cadre XCTest.
L'ajout de XCTest à l'un de mes projets a ajouté un "/" aux chemins, les empêchant de trouver 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 de l'éditeur de liens lors de la recherche d'une classe 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 classes d'application disponibles pour votre cible de test automatiquement ...
Donc ça signifie:
J'ai eu le même problème; le problème (pour moi, au moins) était que le FRAMEWORKS_SEARCH_PATHS
le paramètre de construction répertorie le dossier des frameworks du SDK après le dossier des frameworks du développeur principal.
Les frameworks inclus avec Xcode ont trois versions distinctes: une pour OS X, une pour iOS (appareil) et une troisième pour le simulateur iOS. La version OS X se trouve dans le dossier principal du développeur, les deux autres étant sous leurs dossiers de plate-forme respectifs. Le hic ici est que si vous ne spécifiez pas de rechercher d'abord les dossiers du SDK (qui se trouvent dans les dossiers de la plate-forme), Xcode (ou plus correctement, l'éditeur de liens) trouvera la construction 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 paramètres de construction. Si vous placez des paramètres de construction dans le fichier de projet (je ne le recommande pas, mais c'est une autre question pour un autre jour), il est simplement nommé "Chemins de recherche du cadre".
REMARQUE: Parfois, Xcode est un peu lent à comprendre; vous devrez probablement supprimer votre dossier build
(mieux qu'un simple nettoyage) pour que cela prenne effet.
Avoir le même problème après la conversion des tests de SenTestCase en XCTestCase. Rétablissement du problème fixe des répertoires du framework:
"$(SDKROOT)/Developer/Library/Frameworks" (non-recursive)
"$(DEVELOPER_LIBRARY_DIR)/Frameworks" (non-recursive)
Donc, pour moi, ce qui me manquait après avoir tout essayé dans ce post, c'était:
Autres drapeaux de l'éditeur de liens:
-framework XCTest
J'utilise actuellement Xcode 6.0 (avec le SDK iOS 8), donc je suis surpris que l'option "Modifier> Refactor> Convertir en XCTest ..." ne l'ajoute pas automatiquement.
J'étais confronté à un problème lors de l'ajout du cadre sentestingkit dans xcode 5. Ces paramètres ont fonctionné pour résoudre le problème de l'éditeur de liens.
J'ai eu le même problème après avoir renommé mon nom cible et déplacé les choses. Il s'est avéré que mes tests faisaient partie de mon objectif principal. Assurez-vous que tous vos fichiers de test n'appartiennent qu'à votre cible de test.
Sélectionnez simplement un fichier .m, assurez-vous que le volet droit est ouvert.
J'ai eu ce problème lors de l'ajout d'un autre fichier pour les tests. Si vous faites cela avec (CMD + N), assurez-vous de ne cibler que le bundle de test (c'est-à-dire 'AppNameTests').
Je suppose que seuls ces bundles .xctest ont accès au framework XCTest.
J'ai eu le même problème lorsque j'ai essayé de créer des tests unitaires basés sur XCTTest avec le SDK pré-7.0. Lorsque j'ai choisi 7.0 comme SDK de base, ce type d'erreur de lien a disparu.
Eu le même problème mais s'est retrouvé avec une solution légèrement différente.
sélectionnez XCTest.framework et assurez-vous que seul votre dossier de test est coché sous Target Membership.
Assurez-vous que le chemin du framework de recherche (FRAMEWORK_SEARCH_PATHS
) Pour la cible YourProjectTests
inclut le chemin $(SDKROOT)/Developer/Library/Frameworks
, et que celui-ci est répertorié avant $(inherited)
.
Dans mon cas, les deux chemins étaient présents, mais $(inherited)
était le premier.
Nous remercions https://stackoverflow.com/users/181947/brian-clear on Apple Mach-O linker (id) avertissement: construction pour MacOSX, mais liaison contre dylib construit pour iOS