Fuck XCode !

photo Oui le titre est vulgaire, mais ça fait du bien de se défouler! Dans le précedent post j’expliquais pourquoi j’avais abandonner PhoneGap pour faire mon application. J’étais alors loin d’imaginer la galère que ça allait être en natif avec XCode.

Notez que j’avais mis à jour mon XCode à la sortie de iOS 5 pour avoir la dernière version 4.2.

 

Donc je me lance : “Fichier -> nouveau projet” et je tombe sur un nouveau type d’application “Page-Based Application”. Comme c’est exactement ce que je souhaite faire, je décide de le tester. A la fin de ma journée c’est plié mon application est terminée. Ca fonctionne sur le simulateur et sur mon iPhone mais juste avant de rentrer chez moi je relance rapidement un test mais avec le simulateur iOS 4.3 cette fois. Surprise, ça ne compile pas :(Et oui la classe UIPageViewController n’existe qu’à partir de iOS 5. Ok, je poubellise ma journée..

Le lendemain je recommence un projet “Single View Application” et on me propose une option “Use storyBoard”. Ok pourquoi pas, ça a l’air plus simple de gérer ses XIB avec un storyBoard. Et donc après une demie journée de travail je termine de nouveau mon application. Et de nouveau ça ne fonctionne pas sur iOS 4.3. J’ai mis plus de temps avant de comprendre que ça venait des storyboards compatibles uniquement iOS 5. Quelqu’un peut m’expliquer pourquoi une nouvelle représentation graphique des vues ne pourrait pas générer du binaire compatible iOS 3 ??

Donc merci Apple pour toutes ces nouveautés d’XCode 4.2, vraiment merci ! J’ai hâte de pouvoir les utiliser dans 3 ou 4 ans lorsque nos clients sauront tous au moins sur iOS 5. Car aujourd’hui nous avons encore beaucoup de clients avec des iPhones 3G qui ne passeront donc jamais sur iOS 5. Et je ne parle même pas de ceux qui ne mettent jamais leur iPhone à jour.

Sortir aujourd’hui une application uniquement compatible iOS 5 c’est juste stupide !

Bref ! J’ai donc recodé mes vues avec de beaux XIB et enfin mon application fonctionnait sous iOS 3 et 4. Miracle !! Je la passe donc à notre équipe de validation. 10 minutes plus tard j’ai un email “impossible de l’installer sur mon iPhone 3G sous iOS4.1”. Mince je l’ai pourtant testée sur un 3GS avec le même OS. Donc je me balade de bureau en bureau pour enfin trouver un iPhone 3G : en effet, impossible de l’installer. Après des recherches sur le net je trouve (sur ce site) les options de compilations à ajouter. Car à partir de l’iPhone 3GS l’architecture est basée sur du armv7 alors que l’iPhone 3G est armv6.

Là c’est clair Apple a définitivement oublié l’iPhone 3G. Par défaut votre application ne fonctionnera pas sur ce terminal.

Avec ces options j’arrive enfin à installer l’application sur un iPhone 3G ! Mais resurprise : elle se lance mais ne fonctionne pas correctement. Mes 3 vues qui étaient côte à côte dans une UIScrollView se superposent. A ne rien y comprendre. Après une longue soirée à débugguer j’ai trouvé une solution en modifiant mon code :

if ([device isEqualToString:IPHONE_3G]) {
    frame.origin.x = 0;
    frame.origin.y = frame.size.width * i;
} else {
    frame.origin.x = frame.size.width * i;
    frame.origin.y = 0;
}

Ne me demandez pas pourquoi, mais sur le 3G l’axe des X et l’axe des Y de ma ScrollView sont inversés. Je ne cherche même plus à comprendre à ce niveau…

Je retourne donc une nouvelle version pour validation et j’ai comme retour :

Je tente donc un dernier changement au niveau de ma compilation. XCode 4.2 utilise par défaut le compilateur ” Apple LLVM compiler 3.0″. Je passe donc en “LLVM GCC 4.2”

C’est un peu mieux et cette fois j’abandonne, je vais en rester là.

Moralité de l’histoire : réfléchissez avant de passer sur XCode 4.2. C’est beaucoup de problèmes et les nouveautés sont juste inutilisables pour le moment.

Et oui il y a des semaines comme ça où : FUCK XCODE !