Xcode 3.2.3 , IOS4 et OCMock

Afin de tester nos développements iPhone nous utilisons largement les frameworks Google-Toolbox-for-Mac et OCMock (cf Tests unitaires et tests d’interface sur iPhone : État des lieux)
Après la mise à jour du SDK4 et le passage à Xcode 3.2.3 nous avons eu une désagréable surprise : nos frameworks de tests ne compilaient plus et jusqu’à aujourd’hui on trouve très peu d’information sur la façon de régler ce problème.
Voici comment nous nous y sommes pris :

L’erreur de build rencontrée est la suivante :

Undefined symbols:
"_OBJC_CLASS_$_OCMockObject", referenced from:
objc-class-ref-to-OCMockObject in WebServiceTest.o
ld: symbol(s) not found

Jusqu’à maintenant nous ajoutions la bibliothèque OCMock.framework à la phase de build « Link Binary With Libraries ». Il semble que l’on ne peut plus utiliser la version précompilée du Framework disponible dans la section téléchargement du site d’OCMock.

Pour faire fonctionner OCMock avec Xcode 3.2.3 vous devez :

  • Effacer ocmock.framework, ainsi que la phase « copy files » du build et toutes les références aux header de OCMock dans les « search path » de votre target.
  • Faire un check out de la dernière version sur le repository svn de OCMock : http://svn.mulle-kybernetik.com/OCMock/trunk
  • Faire un build de la target OCMockPhoneSim
  • Copier le fichier libOCMock.a et le répertoire Headers dans votre projet
  • Ajouter libOCMock.a aux framework de votre projet et ajouter un lien vers le répertoire Headers dans les « search path » de votre target de test

Vous buildez à nouveau et… rien ne se passe.

Apres OCMock c’est maintenant le script de Google-Toolbox-for-Mac qui reste bloqué indéfiniment sur cette erreur :

SBSetAccelerometerClientEventsEnabled failed: (ipc/
send) invalid destination port

Là encore la solution est de récupérer les sources de GTM sur le trunk du repository, puis de remplacer tous les fichiers nécessaires aux tests iPhone comme indiqué dans le guide d’installation :

http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting

Maintenant vous pouvez enfin relancer vos tests !

3 commentaires sur “Xcode 3.2.3 , IOS4 et OCMock”

  • Merci pour l'info. Je me cognais la tête pour savoir pourquoi le linker ne voulais pas lier l'exécutable pour le simulateur avec le framework OCMock. Je n'en n'ai pas non plus trouvé la raison, mais je vais peut-être intégrer les sources d'OCMock comme vous le proposez.
  • Bonjour, Vous pouvez en effet ajouter directement les sources d'OCMock à votre projet (c'est la solution la plus simple). Mais il est aussi possible d'ajouter OCMock en tant que librairie statique. Il faut recompiler le projet OCMock en utilisant la target OCMockPhoneSim. Puis inclure dans votre target de test le fichier libOCMock.a et ajouter les headers à votre search path.
  • Je viens de faire la manipulation que vous proposez avec succès. En téléchargeant OCMock, on récupère aussi ses sources et le projet XCode qui contient déjà une clible iPhoneSim comme vous l'indiquez. C'est sans doute plus simple que de placer tous les sources dans le projet: il y a l'air d'avoir des dépendances avec la lib Hamcrest. Je n'ai pas cherché plus loin puisque ça marche, mais je trouve quand même étonnant que cela ne fonctionne plus sur les nouveaux XCode. J'ai l'impression qu'il n'est plus possible de linker un projet iPhone avec une framework tierce.
    1. Laisser un commentaire

      Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


      Ce formulaire est protégé par Google Recaptcha