Accueil Nos publications Blog Développer sur mobile avec C# et Xamarin

Développer sur mobile avec C# et Xamarin

xamarin_logoSession originale : Go Mobile with C# et Xamarin

Tous les développeurs C# peuvent être des développeurs pour mobiles !

Miguel de Icasa annonce la couleur, le patron de Xamarin est sûr de lui face à une audience de développeurs .NET décidément très intéressés par le sujet puisqu’il s’agit d’une des rares sessions à se dérouler dans la salle de la keynote (une énorme salle pouvant accueillir des milliers de participants).

Contexte

Les applications sont de plus en plus nombreuses, sans (encore) dépasser le nombre de site web, mais ça viendra un jour. C’est un virage incontournable et autant l’aborder du mieux possible.

WP_20140403_16_02_23_Pro

Les utilisateurs s’attendent à de bonnes expériences : réactivité de l’interface, bonne intégration à l’OS, fonctionnalités riches, sauvegarde des données en offline, etc.

Facebook à l’époque a bien tenté de sortir une application officielle en HTML et multiplateforme. La version de l’application de l’époque a récolté des notes d’une moyenne de 2/5. Depuis, sa stratégie a changé pour se tourner vers le natif et obtenir aujourd’hui 3.9/5 en moyenne.

WP_20140403_16_03_48_ProWP_20140403_16_04_29_Pro

C# à la conquête du monde

C# est un langage de prédilection, puissant et hors norme : facile d’accès, maintenable, riche en fonctionnalités (async, LINQ, etc.). Il s’agit bien d’un langage haut niveau avec lequel tout est possible.

Architecturer des applications mobiles

L’approche classique consiste à travailler en silo : développer des applications pour chaque plateforme. Si on souhaite cibler iOS, Android et Windows Phone, on se retrouve donc avec 3 équipes qui travaillent chacune sur un langage différent, à maintenir 3 applications sans rien en commun.

Par ailleurs, les compétences sont très différentes, autant que les environnements de développement :

  • iOS : ObjectiveC + Xcode
  • Android : Java + Eclipse / Android Studio
  • Windows : C# + Visual Studio

Miguel y va de sa franchise en lançant quelques piques envers les autres langages :

  • Java vient tout juste d’intégrer les lambas expressions avec Java 8, quelque chose que C# connaît depuis quelques années maintenant
  • ObjectiveC est un langage “respectable” d’après lui, mais facilement “crashable” puisqu’un peu comme Javascript, le langage n’est pas fortement typé et ouvre la porte à beaucoup d’erreurs

WP_20140403_16_12_45_Pro

Ecrire 1 fois, exécuter partout

L’approche HTML/CSS est une des plus connues, mais a largement tendance à se contenter du plus petit dénominateur commun. Sans parler des soucis de performance en Javascript qui obligent à louer les services d’un expert en la matière pour arriver à ses fins et aux exigences des utilisateurs.

L’approche de Xamarin

Xamarin permet de développer une application multiplateforme en partageant toute une couche business et fonctionnelle. Les interfaces graphiques restent par contre propres à chaque plateforme.

Tous les développements se font en C#, on n’a jamais besoin de développer en ObjectiveC ou en Java !

APIs

Les APIs sont couvertes à 100%, que ce soit iOS ou Android. Lorsqu’un nouveau SDK voit le jour, celui-ci est couvert la même journée par Xamarin.

En plus de wrapper les APIs natives pour y accéder directement en C#, celles-ci embrassent les paradigmes C# avec notamment le modèle évènementiel et d’autres syntaxes qu’on a l’habitude de voir en tant que développeur .NET. Une expérience on ne peut plus confortable donc !

Comment fonctionne Xamarin

Le principe de base repose sur C# et un runtime .NET.

iOS empêche la génération de code dynamique pour des raisons de sécurité, impossible de faire de la compilation just in time donc. Xamarin contourne le problème en compilant le C# directement en code binaire natif.

Android n’impose aucune restriction, il est donc possible d’embarquer un runtime .NET. L’environnement Android avec Xamarin se rapproche beaucoup de ce qu’on a l’habitude de voir sous Windows 8 et Windows Phone.

Le résultat donne des interfaces natives, du code C# et des performances natives.

Des applications natives en C# et sans compromis

Démo time : développons une application native iOS avec C#

Miguel montre l’intégration du designer iOS directement dans Visual Studio, une fonctionnalité attendue depuis bien longtemps ! Pas plus de nouvelle à ce niveau, on ne connaît pas encore la date de disponibilité sur la branche stable…

L’application démo consiste en :

  • Récupérer une photo depuis la bibliothèque de photos du téléphone
  • Appliquer un effet sépia à la photo
  • La partager sur Twitter

Miguel montre combien l’intégration du designer est simple : il créé un bouton, double clique dessus, une callback est alors automatiquement générée pour recueillir le clic sur le bouton.

Très simplement, on voit l’utilisation de l’API native pour accéder à toutes les fonctionnalités nécessaires, cela ressemble beaucoup à du Windows Phone.

Partage de code entre plateformes

Quelques statistiques montrent une moyenne de 75% de réutilisation de code entre chaque plateforme.

iOS est le vilain petit canard du groupe et demande beaucoup plus de code spécifique à l’UI, donc un peu moins de partage.

Avec des frameworks comme MVVM Cross, la réutilisation de code va même au-delà grâce au pattern MVVM et les outils mis à disposition.

WP_20140403_16_32_05_Pro

Portable Class Library

La Portable Class Library est un pivot essentiel dans l’approche Xamarin, et fait parti des techniques possibles de partage de code (au même titre que le partage de fichier via lien).

Miguel dénote 2 types de PCL :

  • PCL Pure
    • Limite les APIs mais simple à mettre en place
    • Requiert plusieurs interfaces pour travailler proprement et abstraire le code
  • PCL Avancée
    • PCL combinée à NuGet
    • L’API publique reste pure
    • L’implémentation ressemble à du natif et est aussi directe que possible

Xamarin tend vers la PCL

Cocher Windows 8, Windows Phone 8, Xamarin.Android et Xamarin.iOS dans une PCL revient à utiliser le profil 78, semble-t-il le profil préféré des équipes de Xamarin.

Plusieurs projets open source fonctionnent avec la PCL et ouvrent de nouvelles possibilités :

  • Mono.Data.Sqlite
    • Moteur SQL compatible sur toutes les plateformes
  • CouchBase
    • Base NoSQL qui permet la synchronisation de données et documents
  • System.Drawing
    • Portage de l’API sur toutes les plateformes, en se basant sur les couches natives de chacun (par ex. CoreGraphics sur iOS)
  • MailKit/MimeKit
    • Pour de la gestion de mail multiplateforme et optimisée pour les mobiles
  • Bien plus à venir !

Application de référence

Un nouveau sample voit le jour avec le Xamarin Store : https://www.xamarin.com/sharp-shirt.

Il s’agit d’une démonstration de combien l’open source va aider à déployer .NET partout. L’application est en outre une belle démonstration des possibilités de Xamarin, avec quelques animations bien réalisées.

Component Store

On peut piocher parmi plus de 150 composants mobiles pour Android, iOS et Windows sur le Xamarin Component Store.

Certains ne supportent qu’une plateforme à la fois, d’autres ciblent toutes les plateformes, en passant par du gratuit ou payant. Il y en a pour tous les goûts, et dans tous les cas, les développements s’en verront accélérés.

A noter le support des Google Glass !

Fragmentation d’Android

La fragmentation sur Android est grande, et Xamarin fournit un outil nommé Test Cloud pour tester une application sur plusieurs téléphones (100aine disponibles !) directement dans le cloud. Tout est scriptable et peut donc être intégré à une chaîne d’intégration continue par exemple.

Les tests portent sur la résolution, le format d’écran, mais aussi le type de puce GPU, pour relever de potentiels bugs en fonction du matériel.

Binding

Il est tout à fait possible de reprendre des bouts de code ou libraries existants déjà sur iOS ou Android.

Plusieurs moyens permettent de créer un pont avec ces composants, c’est ce qu’on appelle le binding dans Xamarin, le wrapper des APIs se base déjà sur ce concept. La procédure est simplifiée par différents outils mais n’est pas toujours simple.

Conclusion

Avec C#, on peut devenir aujourd’hui un développeur mobile pour toutes les plateformes majeures du marché. Le partage de code permet d’accélérer les développements, et d’assurer une maintenance facilitée.

Et fondamentalement, le résultat prend la forme d’un service utilisateur impeccable, avec des performances optimales et un look & feel au plus proche de ses habitudes.