-
Fuck XCode !
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 :
- 3G ios 4.2.1 -> OK
- 3G ios 4.0.2 -> KO
- 3G ios 3.1.3 -> KO
- 3GS ios 3.1.3 -> OK
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″
- 3G ios 4.2.1 = installation OK, et icône OK
- 3G ios 4.0.2 = installation OK, mais icône KO
- 3G ios 3.1.3 = installation KO
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 !
-
Premier essai de PhoneGap
Dernièrement j’avais à développer une application mobile sans grosse difficulté technique. J’ai donc eu envie d’essayer de la réaliser avec PhoneGap.
Je ne vais pas faire d’article pour expliquer comment fonctionne PhoneGap car beaucoup l’on déjà fait mieux que je ne peux le faire (comme octo par exemple) mais juste faire un petit retour d’expérience.
La base de PhoneGap c’est de pouvoir faire des applications mobiles mutliplate-forme en développement en HTML/CSS/Javascript.
Je ne suis vraiment pas un spécialiste du HTML et encore moins du Javascript. Mais je pense qu’il est grand temps de s’y mettre et ce petit projet est une bonne occasion.
Je débute donc et rapidement je tombe sur un premier problème : le titre dans la nav bar en haut de page est tronqué. J’ai rapidement trouvé où changer le CSS pour corriger cela. Ouf
Je développe avec Dreamweaver et c’est assez agréable. En effet il supporte JQuery et PhoneGap. Ca me permet d’avoir un aperçu direct du rendu de mon code et en 2 cliques ça me génère un projet XCode et lance directement le simulateur iPhone pour tester l’application.
Par contre on arrive vite aux limites de Dreamweaver au moment où on utilise du javascript PhoneGap. Par exemple, j’avais besoin de gérer le changement d’état de l’application (passage en background, retour au premier plan..). Pour ça il faut utiliser la méthode :
document.addEventListener("resume", onResume, false);Mais impossible de le tester dans un navigateur ou dans Dreamweaver. Ca ne fonctionne bien sûr que sur l’iPhone.
Et là, re-problème, ma méthode onResume ne se lance jamais
Je suis donc parti sur une longue demi-journée de debug à base de alert(« je passe là ») pour finir par comprendre que Dreamweaver utilise une ancienne version de PhoneGap ne gérant pas l’évènement « resume ». Impossible de trouver le numéro de version PhoneGap utilisé ! Et pas d’explication non plus sur comment utiliser une autre version. J’ai même bêtement intégré le fichier phonegap-1.1.0.js dans mon projet : marche pas car c’est la lib PhoneGap du projet XCode généré qu’il faut changer.J’ai donc fini par abandonner la génération PhoneGap intégré par DreamWeaver. J’utilise PhoneGap normalement dans XCode et Dream ne me sert que d’éditeur de texte car la complétion et l’aperçu c’est quand même bien pratique.
J’avais l’impression d’avoir réalisé le plus dur. Il me restait à ouvrir une simple petite fenêtre popup. Et là, catastrophe, le rendu sur un navigateur est différent de celui sur l’iPhone. Plus grave la transition au moment de la fermeture de la popup fonctionne si elle est ouverte depuis la première page mais pas depuis les autres. Je pense que c’est un problème JQuery et pas PhoneGap puisque je constate le même problème sur un navigateur.
Comment faire pour débugger ??
C’était trop pour moi, j’ai préféré abandonner et repasser sur de l’Objective-C. En une journée j’ai refait ce que j’avais mis 3 jours à faire en Javascript (normal, je maitrise mieux) et hop ça marche !
Donc non PhoneGap ne m’a pas convaincu. En fait pour être plus juste, c’est plus le Javascript qui m’a bloqué. Déjà je n’ai pas assez d’expérience avec ce langage, mais c’est surtout une vraie galère à débugger !



