Xamarin est un framework de développement d’application mobile, basé sur le projet open source MonoTouch, ayant pour but de rendre possible la création d’applications mobiles Android et iOS, en utilisant un seul langage, le C#.

Contrairement à certains Framework de développements multi-plateforme, Xamarin n’a pas pour but de réinventer la roue, ou d’abstraire les spécificités de chaque plateforme (si on met de côté la partie Xamarin.Forms), mais simplement d’offrir la possibilité d’exploiter à 100% les plateformes mobiles, sans devoir apprendre un langage spécifique à chaque OS mobile. Ce langage commun à toutes les plateformes permet de mutualiser les développements de certaines « couches » de son application, comme les accès à une base de données, ou les appels à des webservices.
Cette approche vise à conserver des performances très proches du natif, ainsi qu’une expérience utilisateur qualitative, en proposant sur chaque plateforme une application spécifiquement développée pour celle-ci avec une interface répondant aux codes et aux guidelines en vigueur sur la plateforme.
Autre avantage de cette approche, on a accès à 100% des possibilités offertes par la plateforme.

Xamarin : concrètement comment ça marche ?

Très simplement, si on veut actuellement être présent avec une application mobile sur les 3 principaux OS mobile (sans framework tel que Xamarin), on se retrouve dans le cas de figure suivant :

platforms-OldWay

3 projets différents, pour 3 OS différents. Pour chacun des OS sur lequel on souhaite être présent, on doit développer une interface utilisateur (écrans, styles, animations, etc), mais également développer la partie immergée de l’iceberg qu’on appelle généralement la couche métier (ou couche “Business”). C’est cette couche qui va être en charge de la logique de l’application, d’établir une communication avec des webservices, ou d’accéder à une base de données.
Chaque brique de cette couche métier va devoir être recodée X fois, dans un langage différent, avec des contraintes différentes, et chaque version de cette implantation va apporter son lot de bug inhérent à tout développement informatique.

Le même projet d’application, développée avec Xamarin ressemblera plutôt à ça :

DevWithXamarin

La couche métier devient commune aux 3 plateformes (ici regroupé dans le bloc « App Logic »). Par conséquent, le gain de temps quand on cible plusieurs OS devient très intéressant, de par le fait qu’un bout de la couche métier ne devra être développé qu’une seule fois, et qu’un bug ne devra être corrigé qu’une seule fois.
En revanche, on conserve une création d’interface native pour chaque plateforme.

Un aspect proche du natif qui a des conséquences

Comme expliqué dans les paragraphes précédents, le développement en Xamarin est très proche d’un code « natif ». Même si c’est moins flagrant pour la partie iOS, du fait de la syntaxe de l’Objective-C qui est radicalement différente de celle du C#, il est en revanche très facile de s’en rendre compte en comparant du code Android avec le même code refait avec Xamarin.
Exemple, ci-dessous une Activity (très simple) codée en JAVA, et en dessous de celle ci, la même Activity codée en utilisant Xamarin.

LoginActivityAndroid
LoginActivityXamarin

On peut voir que les deux codes sont très similaires, et un développeur Android n’aura aucun mal à lire le code Xamarin et à comprendre ce qu’il fait.
Autre effet positif de cette approche, quand on développe une application avec Xamarin, on peut profiter de toute la connaissance de la communauté de développement de sa plateforme, ou de la connaissance d’un développeur plus expérimenté.
Enfin, dernier avantage de l’approche Xamarin, le code des interfaces graphiques (Storyboard et xib pour iOS, fichiers xml ou axml pour Android) est très facilement réutilisable dans un projet Xamarin.

A l’inverse, il ne peut pas y avoir de miracle quand on développe en Xamarin. Avoir une connaissance du fonctionnement de la plateforme sur laquelle on code est indispensable, un développeur n’ayant jamais travaillé sur android ou iOS ne sera pas en mesure de développer (facilement) une application, sous prétexte qu’il a une connaissance du C#.

Exemples d’applications développées sous Xamarin

Sans devenir une plateforme incontournable du dev mobile, Xamarin permet à certaines entreprises de diminuer de manière très significative les coûts de développement d’une application.
On commence d’ailleurs à voir apparaître des applications très élaborées, faîtes entièrement avec Xamarin.

Le premier exemple d’application est R’Dio

rdio-logo

Largement mis en avant sur le site officiel de Xamarin cette application concurrente de Spotify a été entièrement développée pour les 3 OS mobiles avec Xamarin.
Elle permet de se rendre compte qu’il est possible, comme ce serait le cas en faisant du natif, de développer une interface utilisateur léchée qui joue sur les effets de transparence (entre autres). D’autre part, cette application démontre également qu’il est possible de s’intégrer complètement au téléphone sur lequel elle est installée, en y exécutant des tâches de fond (comme celle de streamer de la musique).

Un autre exemple d’application, c’est Tesco.

tesco-logo

Acteur majeur du Drive au Royaume-Uni et en Ecosse, son application mobile “Tesco Groceries” est également entièrement réalisée avec Xamarin, preuve encore une fois qu’il est possible à la fois de développer une interface native sur cette plateforme, tout en réalisant des actions plus complexes d’appels webservices, ou de manipulation de bases de données.

Vous pouvez retrouver de nombreux exemples de clients, et d’applications, sur la page dédiée aux clients de Xamarin.