OpenFeint + Unity iPhone + iOS4 = compilation difficile

Si vous jouez un peu sur iPhone vous êtes certainement familiers d’OpenFeint.

Ce service apporte aux jeux qui l’intègrent beaucoup de fonctionnalités « sociales » en vogue :
– Connection avec ses amis Facebook et Twitter
– Feuilles de scores partagées en ligne
– Publications de résultats
– Challenges
– Chat
… et bien plus encore

Beaucoup de choses difficiles et longues à programmer sont rendues quasi-instantanément possibles. Yééé !

Autre bonne nouvelle, il existe un package OpenFeint pour Unity-iPhone qui rend l’intégration encore plus simple.

Et tout ça est gratuit (sauf Unity iPhone bien sûr) à télécharger dans la section développeurs d’OpenFeint

Mais… il y a encore quelques pièges lors de la compilation du projet. Rien de bien grave cela dit, mais autant vous faire gagner un peu de temps.

J’utilise la config suivante : Unity iPhone 1.7 + OpenFeint 2.6 (fraichement chargé depuis la zone développeur du site d’OpenFeint) + Xcode 3.2.3 donc je n’ai plus le Base SDK 3 (merci Apple de l’avoir enlevé à la dernière update…) seulement le 3.2 (pour iPad only) et iOS4 (Tout ça sur un vieux MacBook Pro et Snow Leopard, mais on s’en cogne !)

Comme mentionné dans un post précédent la compilation des projets Unity iPhone 1.7 depuis le passage vers iOS4 est un peu tendue et il faut mettre les mains dans les réglages de préférences de projet pour compiler correctement et faire valider ça par Apple. C’est décrit dans le milieu du texte de l’autre post donc j’y reviens pas.

Ce qui nous intéresse c’est OpenFeint. L’importation du package dans le projet Unity est on ne peut plus simple et son paramétrage, puis utilisation de base est assez bien décrite dans la doc qui vient avec (en anglais bien sûr).

Lors de la première construction du projet Unity il faut passer par le menu Buildind Settings et choisir Build (tout court – pas Build and Run) car OpenFeint va ajouter pas mal de choses dans les sources Xcode : des classes, des frameworks… et faire des changements dans les préférences projet aussi.

Mais il ne pourra pas tout installer tout seul. Une fois le projet Xcode sorti de Unity une petite fenêtre va apparaître pour signaler qu’il faut que vous ajoutiez à la main le dossier « OpenFeint » à votre projet Xcode, et ce à chaque fois que vous ferez un Build tout neuf ou un Rebuild complet depuis Unity. Mais pas un Append. C’est tout simple, on prend le dossier et on le fait glisser dans la colonne Groups & Files de Xcode. Pour ma part je demande ensuite la copie des fichiers (pour garder intact mon dossier d’origine d’OpenFeint qui servira encore plus tard…) et je choisi le mode Relative to Enclosing Group.

Or, comme depuis iOS4 à chaque nouveau Build depuis Unity il faut faire des modifs dans les préférences de projet Xcode… autant dire qu’il faut l’ajouter à chaque fois ! Ce dossier de sources OpenFeint se trouve dans le dossier OpenFeint 2.6 que vous avez téléchargé.

Une fois ce dossier ajouté il vous faudra aussi importer les frameworks AddressBook et AddressBookUI qui ont été oubliés (?) et provoquent des erreurs de compilation.

Il vous faudra ensuite chercher la variable « gDidResignActive » dans AppController+OpenFeint.mm et supprimer le mot « static » ou « extern » au début de sa définition.

Enfin, rendu à ce stade vous pouvez lancer une compilation. Attention c’est un poil long : + de 400 fichiers à traiter.

Mais si vous avez changé votre DaseSDK vers iPhone Device 4 et iPhone OS Deployment Target vers iPhone 3 (nécessaire pour une publication valide sur l’AppStore) elle va foirer normalement sur les lignes de codes FBXMLHandler du Facebook Connect qui est embarqué par OpenFeint.

Le débugeur vous permettra d’atteindre facilement le code en question :

#ifdef __IPHONE_4_0
@interface FBXMLHandler : NSObject< NSXMLParserDelegate > {
#else
@interface FBXMLHandler : NSObject {
#endif
NSMutableArray* _stack;
NSMutableArray* _nameStack;
id _rootObject;
NSString* _rootName;
NSMutableString* _chars;
NSError* _parseError;
}

La solution la plus simple tirée du forum Unity est tout simplement de mettre tout ce qui pose problème en commentaire (et attendre que les ingénieurs de Apple, Facebook, OpenFeint ou Unity trouvent d’où vient le bug !)

Soit :

//#ifdef __IPHONE_4_0
//@interface FBXMLHandler : NSObject< NSXMLParserDelegate > {
//#else
@interface FBXMLHandler : NSObject {
//#endif
NSMutableArray* _stack;
NSMutableArray* _nameStack;
id _rootObject;
NSString* _rootName;
NSMutableString* _chars;
NSError* _parseError;
}

Et voilà, vous devriez réussir normalement à compiler correctement OpenFeint pour Unity Phone de manière valide pour l’AppStore ! A vous de faire des miracles avec :-)

Pour ma part je vais m’intéresser un peu plus à ce qu’OpenFeint offre du coté multiplayer.

@+

Laisser un commentaire

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

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>