J'ai un projet XCode4/iOS avec une cible régulière et une cible de test unitaire. Tout fonctionne bien, sauf lorsque j'essaie # d'importer une de mes classes dans ma classe de test et d'essayer de l'utiliser. Si j'essaie de créer la cible de test unitaire, j'obtiens l'erreur de lien suivante:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_FRRCategory", referenced from:
objc-class-ref in CategoryTests.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
Dans CategoryTests.m, j'importe le fichier d'en-tête de cette façon:
#import "../todoro/FRRCategory.h"
Qu'est-ce que je fais mal?
Assurez-vous que le fichier source FRRCategory a été ajouté à vos sources de compilation pour votre cible de test unitaire.
Xcode 4:
Navigateur du projet -> "[Nom du projet]" -> Sous Cibles, sélectionnez votre cible de test unitaire -> Phases de construction -> Développez les sources de compilation -> Cliquez sur + en bas des sources de compilation et ajoutez le fichier source correct.
Suivez les instructions ici . Il ne vous oblige pas à ajouter de fichiers pour compiler les sources.
J'ai d'abord manqué que "Symboles cachés par défaut = NON" devrait être pour votre cible d'application , pas la cible de test.
Cela a fonctionné pour moi de toute façon (tm).
Un autre problème que vous pouvez rencontrer est si votre test unitaire utilise des fonctions C (ou similaires) qui ne sont pas utilisées dans l'application réelle.
Cela peut se limiter à avoir un sous-projet. Dans mon cas
Mon test unitaire a utilisé quelques-unes des fonctions C qui n'ont été utilisées nulle part ailleurs, et celles-ci ont été supprimées du binaire de l'application (PAS du fichier .a du sous-projet).
La solution consiste à
(* ne faites pas cela dans les configurations de version car cela gonflera l'application avec du code qui n'est jamais appelé).
Vous ne devez vous référer à un dossier à l'intérieur de votre importation que si votre fichier se trouve dans un framework. Sinon, une fois que vous avez ajouté votre fichier au projet, faites simplement #import "FRRCategory.h"
. Eh bien, sauf si vous avez fait quelque chose de bizarre avec vos chemins de recherche d'en-tête.