Migration d’une application vers Xamarin 1/2

Auteur du billet de blog : Rudy Spano - Neotech Solutions

Rudy Spano

Consultant .Net
  Publié le vendredi 26 août 2016

Expert technique .Net passionné par tout ce qui est innovant en environnement Microsoft. De la mobilité, du client lourd (Xaml Applications) mais aussi une petite pointe de Web...

Retour d'expérience

J’ai décidé de migrer l’une de mes applications existantes Windows Phone 8.1 vers Android afin d’améliorer son audience.

L’idée était de migrer l’application avec le moins d’effort de développement possible.

Dans cette démarche Xamarin en mode Xamarin.Forms m’a semblé la solution la plus efficace.

En effet, Xamarin promet une réutilisation/mutualisation du code C# :

  • le code métier
  • les ViewModels
  • ...

Et Xamarin Forms permet de mutualiser des interfaces écrites en XAML.

Il est aussi possible de créer des interfaces natives mais partant d’une application à base de XAML et ne maitrisant pas les interfaces natives Android (axml), le choix fut rapide bien que Xamarin.Forms ait la réputation d’être encore assez expérimental… 

Sur le papier, cette technologie est donc le candidat idéal pour migrer nos applications mobiles Microsoft Windows Phone Silverlight, Windows Store, Universelles ou UWP vers Android.

La plus-value de Xamarin est aussi et surtout de créer des applications Muti-plateformes : une seule base de code pour Windows Mobile/Desktop, Android et IOS. Dans mon cas, seul Android est la cible dans un premier temps. L’application Windows existe déjà (la mutualisation sera peut-être utile dans un second temps) et je n’ai pas de Mac pour compiler une application IOS et encore moins de compte de développeur Apple…

Je vous invite à vous documenter sur le site de Xamarin si vous voulez en savoir plus sur cette technologie : https://www.xamarin.com/

 

Environnement de développement

Avant de foncer tête baissée sur la création d’une solution Visual Studio Xamarin, je vous conseille de vous assurer que votre Visual Studio est à jour (à cette date : VS 2015 Update 3) et surtout que votre version de Xamarin est à jour afin de partir sur la dernière version des templates de démarrage. 

A noter que les mises à jour sont assez fréquentes..!

 

Création de la solution

C’est donc le moment de créer notre solution !

A noter que, comme toujours, on a la possibilité d’utiliser une solution existante (dans le cas où on souhaiterait partager du code avec un autre projet notamment).

Vous trouverez les projets Xamarin dans la section Cross-Platform. Le but de cet article n’ést pas de vous décrire en détails les différents templates à base d’UI natives/Xamarin.Forms, PCL/Shared projects Sachez que les ressources ne manquent pas sur le sujet sur le web.

 

Le template de projet permettant de répondre à notre objectif est Blank Xaml App (Xamarin.Forms) initialisant une solution avec :

  •  un projet par plateforme
    •  un projet mobile Android
    •  un projet mobile IOS
    •  un projet Windows 10 UWP 
    •  un projet Windows Store 8.1 Phone
    •  un projet Windows Store 8.1 Desktop/Tablet
  •  une PCL (Portable Class Library) : c’est dans ce projet référencé par les différents projets de démarrage, à définir selon la plateforme ou vous souhaitez exécuter/déboguer le code, qu’il va falloir écrire votre code partagé: vos ViewModels, vos UI Xaml, vos Styles, Converters etc....

Dans ce projet, plus précisément on trouve d’emblée les fichiers suivants:

  •  App.Xaml/App.Xaml.cs : le point d’entrée qui ne vous dépaysera pas si vous avez l’habitude de développer des application XAML.
  •  MainPage.Xaml : une première page avec un beau « Hello World » cross-plateforme !

Même si la partie code/réalisation sera traitée dans mon prochain ticket de blog (partie 2/2), vous remarquerez de suite les points suivants :

  • Le XAML est assez différent de celui qu’on connait depuis WPF… Certains contrôles sont différents, il y’a des renommages sur pas mal de propriétés (la plupart même à vrai dire). Ces changements sont parfois bien trouvés mais restent assez déstabilisant... Après quelques heures de développement, on commence à s’y faire...
  • Et non ! Ca n’est pas votre Visual Studio qui fait des siennes… On ne peut pas voir le rendu du XAML. Un « Xaml Previewer » devrait sortir pour Visual Studio mais on n’y est pas encore… Il est pour l’instant disponible pour Xamarin studio en version Alpha. Et « OUPS » disponible seulement sur Mac OS à priori…

Si, de votre côté, vous découvrez la plateforme, je vous conseille de commencer par vous amuser avec cette vue et de l’exécuter sur les différents émulateurs/devices.

 

Ajoutons que comme souvent sur des projets .NET, il est conseillé de créer de nouvelles couches (Class Libraries) pour placer votre code métier, votre DAL ou tout autre domaine de code à isoler. 

 

Pour un bon démarrage, sans embuche !

Revenons-en à notre objectif de migration de notre projet WP en Android.

Pour ne pas polluer la solution, j’ai décidé de la nettoyer afin de ne garder que le strict nécessaire : le projet mobile Android et le projet PCL.

Un autre point à mon sens important, compte tenu du manque de maturité de la plateforme, est de s’assurer dès le début que l’on dispose de la dernière version des paquets Nuget de Xamarin.Forms sur la solution globale

 

Pour ce qui est de l’émulateur à utiliser, Microsoft fournit plusieurs émulateurs Android basés sur Hyper-V qui sont de grande qualité s’il vous reste assez de RAM pour en exécuter une fois Visual Studio ouvert :) .

Vous avez le choix d’émuler différents devices : smartphone/tablettes, différentes résolutions et différentes version d’Android (4.x ->6.x)

Les performances et les fonctionnalités de simulation (Accéléromètre,  GPS, network, …) sont de la partie !

Vous trouverez toutes les informations dessus ici : https://www.visualstudio.com/en-us/features/msft-android-emulator-vs.aspx.

 

La suite

Dans mon prochain billet, je détaillerai les différentes étapes du portage de mon application vers Xamarin Forms avec les bonnes et mauvaises surprises auxquelles j’ai été confronté ainsi que des solutions techniques trouvées à différentes problématiques classiques que nous développeurs rencontrons lorsque l'on fait du développement mobile.