Xamarin iOS retour d’expérience

  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): Web App : http://trackus.reactor.fr/pages/observer.html?code=AAAAAA Windows Phone (Silverlight) : https://www.microsoft.com/fr-fr/store/apps/trackus/9nblgggxzpg7 Windows 10 : https://www.microsoft.com/fr-fr/store/apps/trackus-10/9nblggh5xq6q Android : https://play.google.com/store/apps/details?id=fr.reactor.trackus 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…