Vous avez tous pu constater le buzz récent autour de Xamarin. J’étais à deux doigts d’acheter une licence iOS qui m’aurait couté dans les 700€. Un brave de chez Xamarin m’a conseillé d’attendre la build de Microsoft, ce que j’ai fait. Un grand merci à ce monsieur de chez Xamarin sans quoi j’aurai été bien bien vénère, il m’a fait économiser beaucoup…
Xamarin est donc gratuit ! Et c’est une excellente nouvelle. Car sans ça, les étudiants, les amateurs, les petit auto-entrepreneur comme moi voir même quelques TPE aurait bien eu du mal à se lancer sur cette techno.
Microsoft rachète donc Xamarin et l’offre dans toutes ses éditions Visual Studio 2015 (community, pro et entreprise). Par contre le reste des offres de Xamarin, à savoir les cours via l’university Xamarin et son centre de test restent payant. Je comprends que Xamarin doit trouver son modèle économique, mais maintenant que Microsoft est derrière, j’espère que les cours seront gratuit. D’autant plus qu’ils font des efforts fou pour que les développeurs codent pour Microsoft. Donc pourquoi faire payer des cours sur une technos qui permettrait d’universaliser nos apps, dont celle sur WUP. Bref, l’academy de Microsoft est gratuite, j’imagine qu’a terme on aura des cours Xamarin dessus aussi.
Autre bonne nouvelle, c’est l’arrivé depuis qq jours du simulateur iOS sur Windows. Oui oui, j’ai bien dit un simulateur iOS sur Windows. Il est inclu dans la version stable de Xamarin depuis début juin 2016. Je l’ai testé en version alpha puis stable depuis un mois. Et ca marche plutôt bien !
1) Situation
J’ai donc testé Xamarin iOS. J’ai une application (Trackus) que je développe depuis maintenant 2 ans sur divers plateformes (Windows Phone, Android, Web App, WUP), mais il me manquait iOS. Comment faire ?
- Choix 1 : natif (Objective C ou Swift). Je préfère en générale cette approche. Coder en natif permet d’apprendre pas mal de chose, d’avoir des ressources (docs, communauté, billet Stackoverflow…). Mais ici je n’avais même pas le matériel. Et chez Apple ça coute un bras. De plus il faut tout réapprendre. Je bosse sur Windows depuis toujours. Et le mac… je connais pas ou mal. Je galère pour faire des trucs tout simple. Mon temps d’apprentissage va devoir impacter en plus l’OS et les outils de l’OS. Ca fait beaucoup pour un noob.
- Choix 2 : Hybride (Cordova, Ionic). Pourquoi pas. J’ai passé un mois à me former sur AngularJS, Ionic aurait été un choix. Mais mon application nécessite de tourner en background, utilise des maps et le GPS… J’ai des doutes sur la fiabilité de tout cela en hybride. Peut être ai-je tort. Cela pourrait être un sujet prochain. Je n’ai pas vraiment étudier la question à fond.
- Choix 3 : Xamarin iOS. C’est mon choix. Plus par curiosité qu’autre chose. Je suis les divers évolutions de Xamarin et le ressenti des développeurs. Cette techno est prometteuse. Mais dans les faits ?
- Choix 4 : Xamarin Forms : autre solution, non étudié. Je voulais d’abord me rapprocher du natif et aborder éventuellement Xamarin Forms plus tard.
Pour info, mon application (http://trackus.reactor.fr) propose de géo-localiser un utilisateur A et de permettre à un utilisateur B de le suivre sur une carte. J’utilise pour cela un code alphanumérique sur 6 chiffres qui va identifier un parcours. L’utilisateur A envoi ce code à l’utilisateur B qui peut alors suivre sa trace. Ce code est modifiable ce qui permet de garder un certain anonymat. J’ai donc un serveur qui permet d’échanger ces informations (Web API2 + Entity-Framework). Voici les apps déjà en prod (bêta):
-
Windows Phone (Silverlight) : https://www.microsoft.com/fr-fr/store/apps/trackus/9nblgggxzpg7
Je trouve le sujet intéressant car il aborde d’autre sujet que la classique “liste de tâches” ou le flux RSS qu’on affiche en liste. Ici on a du GPS (droits utilisateurs), du offline/online à gérer (perte de réseau pendant un déplacement, stockage des données, gestion http REST), une tâche en background (cycle de vie) et la manipulation de maps (iOS, Google, Bing). Bref ya du boulot mine de rien.
2) à fond les ballons
On y va on code. Ha oui, mais attends, d’abord le matériel… Peux importe ce que vous faites, si vous créez une app pour iOS il vous faudra un mac. Si vous êtes un peu short, il existe des solutions comme MacInTheCloud qui vous permet de louer un mac sur internet. Mais vous ne pourrez faire que du simulateur car impossible de brancher un device physique sur la machine. Sinon vous achetez un mac. Un mac mini fera l’affaire. J’ai acheté le mien sur le bon coin. Une pure affaire. Ca part comme des petits pains, donc sauter sur l’occasion.
Vous avez donc un poste Windows, un poste Mac, branché sur le même réseau. C’est parti. Faut tout installer. Yen a pour un moment si comme moi vous tourner max à 2 Mbps (oui ca existe encore !). Il faut installer Xamarin sur le mac et installer Visual Studio 2015 update 2 + le kit simulateur. Tout est dis sur le site de Xamarin :
https://developer.xamarin.com/guides/ios/getting_started/installation/
https://developer.xamarin.com/guides/cross-platform/windows/ios-simulator/
Quand tout est installé il faudra créer un projet iOS et tester la connexion avec le Mac (agent de build)
Il faut que votre icone soit verte. Sans ça pas de connexion avec le mac, donc pas de build ni de simulateur.
Dans l’ensemble le setup se fait pas trop mal. Xamarin améliore grandement la simplicité car avant il fallait gérer l’agent de build à la main (voir précédent post sur le sujet).
3) Les mains dans le cambouis
J’ai travaillé essentiellement sur Visual Studio avec le simulateur. Ce dernier propose pas mal de petites options intéressantes. Il y a même un simulateur de déplacement (à pied, en vélo et en voiture) ce qui permet de tester le GPS. Idéale dans mon cas. Il manque cependant un bouton pour couper le réseau ou un “dégradateur de réception 3G/4G” histoire de tester le mode offline. A part cela, c’est une petite merveille ce simulateur !
Je suis novice pour les applications iOS. J’ai du lire un peu de doc. Et celle de Xamarin est plutôt bien faite. J’ai parfois été bloqué mais l’essentiel est la. Bien présenté. Par contre la doc officiel de Apple… comment dire cela poliment… je déteste.
Il faut connaitre le cycle de vie d’une application sur iOS (comme sur Android ou WP). C’est essentiel. Pour le reste on code avec C#. Donc que du bonheur. Rien à redire la dessus. Reste l’interface graphique. Et la c’est pas top top…
Visual Studio possède un designer. Similaire à XCode, on a un storyboard sur lequel on place des vues que l’on relie à des ViewControlers. De la on a notre liaison avec le code.
Pour ma part j’ai avancé relativement rapidement au début. Mais quand il a fallut rendre l’application joli et “adaptative” j’entends compatible iPhone 4 5 6 +, c’est devenu franchement casse burne.
Le designer sous Visual Studio permet de facilement ajouter des éléments mais il est affreux pour les positionner. A priori il existe deux façons de faire pour positionner les éléments sur l’UI. L’ancienne méthode et la nouvelle qui implique les “contraints”. Cette dernière est une abomination intellectuelle. Quant à la première elle fonctionne mal sur Visual Studio.
J’en suis arrivé à un point ou j’ai carrément ouvert ma solution depuis Xamarin sur le Mac. Et en effet il y a moins de soucis de ce coté la. Mais du coup je perds l’intérêt de mon billet ! Moi je veux bosser sur Windows ! Franchement, ça serait à refaire, je coderai sur Xamarin sur le Mac. Problème, il n’existe pas de moyen de bosser avec Visual Studio Online (Team Services)…
Le designer d’interface utilisateur iOS sur Visual Studio n’est pas au point. Il est buggé et parfois me fou un merdier pas possible.
J’ai été très rapide sur le code, grâce à la puissance du C# et au simulateur super pratique. Par contre j’ai perdu un temps fou (70% facile) à essayer de rendre mon application joli et adaptative. Ni sur Android, ni sur Windows Phone je n’avais perdu autant de temps. Elle reste donc pas super joli et pas adaptative comme je le voudrais.
4) Debug
On a un retour des bugs via l’agent de build. Mais parfois c’est pas clair. J’ai eu un cas ou mon application plantait sans aucun message. J’avais bien mes break point, mais ca passait pas dans le catch de mon try/catch.
J’en ai profité pour ajouté hockeyapp. Un utilitaire fort pratique qui permet de faire du Crash Report. Il va même plus loin car il s’intègre dans la chaine du continious delivery et peut être plugé à Team Services (Visual Studio Online). On a donc des metrics users, des feedbacks et des rapports de bugs.
Le seul souci c’est que la dll fait 34 Mo !!! Mais il arrivait à me remonter des stacktraces que je ne voyais pas sur mon IDE.
L’idée ici est de monitorer notre application une fois qu’elle sera dans la nature (sur le store) et pouvoir continuer à debugger, améliorer notre app.
5) Mise en prod
J’ai suivis ce guide :
Après une dizaine de tentatives, je suis arrivé à cet écran libératoire :
Ca n’a pas été simple. Je n’avais jamais vraiment bien compris la gestion des certificats, des provisionnings profile etc il y a quelques années déjà, pour une autre appli. Je remarque que c’est toujours pas simple de ce côté la non plus en 2016. Coté Android et Windows, c’est nettement plus simple.
6) Conclusion :
Dans l’ensemble je suis satisfait. Les devices de chez Apple sont, je dois le dire, d’une grande fiabilité. Mon code à marché du premier coup, sans trop de pépins ! Sur Android et WindowsPhone j’ai du réaliser de nombreux tests grandeur nature qui se sont soldés par pas mal d’échecs. Mes premiers tests avec l’iPhone sur une grande distance, pendant 3h ont été un succès. Bon je m’emballe pas non plus… on verra avec le temps et le retour utilisateur.
Xamarin iOS est un pure outil pour les codeurs C#. Cependant le designer de l’interface graphique n’est pas au point. Et quand on sait à quel niveau il faut mettre la barre aujourd’hui pour le design d’une application, on est un peu déçu. Je pense qu’avec le temps que ça viendra.
Mon app est en cours de validation, je reviendrai certainement mettre à jour cet article.
7) Bonus vidéo
Mon premier screencast, soyez indulgent.
Yann Vasseur