Le développement multi-plateforme : enjeux, promesses et réalité

Maximiser l'impact de son application mobile, en terme de visibilité et de ROI, de services apportés aux utilisateurs, c'est développer cette application pour différents facteurs de formes (smartphones, tablettes) et pour différentes plateformes logicielles (iOS, Android, BlackBerry, WP).

Le marché des plateformes mobiles est en proie à une certaine fragmentation. Quels sont les enjeux du développement mobile sur ces différentes plateformes, les avantages et contraintes de ces approches ?
Maximiser l'impact de son application mobile, en terme de visibilité et de ROI, de services apportés aux utilisateurs, c'est développer cette application pour différents facteurs de formes (smartphones, tablettes) et pour différentes plateformes logicielles (iOS, Android, BlackBerry, WP).

1. Les enjeux.
Aujourd'hui l'explosion des Smartphones et des tablettes - 20 millions de Smartphones pour 2 millions de tablettes - représente un potentiel énorme pour le développement d'applications tant pour le particulier dans sa vie quotidienne que pour le professionnel. Plus d'un million d'applications sont déjà disponibles, toutes plateformes confondues.
En 2011, les ventes de Smartphones en France ont dépassé celles de mobiles classiques : 11,9 millions de Smartphones vs 11,8 millions de téléphones classiques.
En parallèle la fragmentation des plateformes mobiles continue, chaque acteur veut tirer sont épingle du jeu. En Europe (France, Allemagne, Italie, Espagne, Royaume-Uni) et selon MobiLens (cabinet Comscore), Apple continue d'occuper 20,3% du marché, derrière Android qui a connu une croissance forte en 2011 pour atteindre 22,3% en juillet 2011, alors que Symbian chutait de 53% à 37,8%. BlackBerry reste quatrième avec 9,4% de part de marché.
D'autres comme Microsoft avec Windows Phone 7 tente rattraper le peloton de tête, malgré un recul de 11,5% à 6,7% en juillet 2011.[1]
Un enjeu important pour les entreprises souhaitant créer une application mobile, est d'être présente sur les différentes plateformes leaders du marché.
Mais quelle stratégie adopter ? Faut-il développer une application spécifique pour chaque plateforme, ce qui représente un coût ? Faut-il se contenter d'une application web mobile ?  Quelles sont les alternatives ? Est-il possible de développer une application et de la déployer sur plusieurs plateformes ? Dans ce cas est-ce possible et quelles sont les solutions ? 

2. Développer une application commune à différentes plateformes - différentes approches.
Pour développer une application "multi-plateforme", de nouveaux Frameworks et outils basés sur un seul langage pour ensuite le déployer sur différentes plateformes ont commencé à émerger. Cependant, tous n'ont pas la même approche face au problème, et n'ont donc de ce fait pas les mêmes capacités. Aucune de ces démarches n'est fondamentalement bonne ou mauvaise. Elles ont chacune leurs avantages et inconvénients.
C'est pourquoi, avant de se lancer dans l'utilisation d'un outil en particulier, il est recommandé de déterminer le type de solution le plus approprié vis-à-vis du type de contenu ou du service à mettre en place.

Les différentes approches sont :
- Solution n°1 : La cross-compilation.

"Un cross-compiler (ou compilateur croisé) est un programme capable de traduire un code source en code objet ayant un environnement d'exécution (architecture matérielle, système d'exploitation) différent de celui où la compilation est effectuée."[2]
Dans le contexte du développement mobile, cela fonctionne de la manière suivante : Le Framework fournit une interface de programmation (Application Programming Interface – API) indépendante des plateformes cibles. Cette API utilise un langage de programmation grand public (JavaScript, Ruby, Java, etc.) Les développeurs utilisent cette API pour construire l'application mobile, comprenant l'interface graphique, la persistance de données, et la couche métier. Le code passe ensuite par le cross-compiler qui le transforme dans un langage dédié à une plateforme (Android, iOS etc.) Le programme ainsi obtenu peut être déployé et exécuté de manière native sur le mobile.

- Solution n°2 : Construire une application web mobile.

Une application web mobile s'exécute dans le navigateur web du mobile. Cette solution implique d'utiliser des technologies Web standards comme HTML, CSS, JavaScript pour créer une application ainsi que lui donner un comportement et une apparence "natif". Ceci est notamment "possible" grâce aux capacités du HTML 5 et CSS 3 ainsi que des bases de données embarquées.

- Solution n°3 : Construire une application web hybride.

Le principe est de fournir un moyen de délivrer des applications qui tournent localement avec des technologies web restituées via le moteur de rendu web, et tirant profit des capacités matérielles locales, comme le GPS, la caméra, etc.
Dans ce modèle hybride, l'application web fonctionne à l'intérieur d'un mince emballage natif qui fournit une passerelle vers le système d'exploitation.
L'application Web est mise en cache localement sur le périphérique, supprimant la nécessité d'une connexion.

3. Avantages et contraintes des différentes approches.
D’une part, l’approche cross-compilation a l'avantage de générer une application en code natif, donc performante et une expérience utilisateur proche d'une application native. Par contre cette solution peu s'avérer difficile à mettre en œuvre. Cela nécessite en effet de savoir traduire un langage grand public dans plusieurs langages spécifiques possédant chacun leurs propres particularités. D'autre part, avec l'émergence de nouvelles plateformes (WP7 par exemple) ou de nouvelles fonctionnalités sur une ou plusieurs plateformes, la maintenance et l'évolutivité peuvent s'avérer relativement complexe à mettre en place. Enfin chaque évolution de la plateforme native nécessite de mettre à jour l'outil de « cross-compilation » afin de prendre en compte les évolutions de la plateforme. On note la plupart du temps un décalage dans la prise en compte des évolutions.
L'approche  application web mobile est une solution séduisante, notamment par sa facilité de développement reposant sur des standards comme HTML, CSS et Javascript. Elle couvre un large éventail de plateforme, pour un déploiement simplifié, une disponibilité immédiate de l'application, puisqu'elle s'exécute dans le navigateur web de l'appareil. De plus l'arrivée des nouveaux standards comme HTML 5 permet de gommer certains défauts de cette approche, notamment l'utilisation du matériel (caméra, GPS,...), l'élaboration d'interfaces graphiques procurant une expérience utilisateur confortable, la gestion du mode déconnecté,.... Cependant HTML 5 est une technologie jeune, et son support n'est pas égal sur l'ensemble des plateformes.
L'approche application Web hybride repose également sur un code commun et utilisant les standard - HTML, CSS et Javascript – mais reposant sur une couche d’encapsulation de la plateforme native. En effet, cette solution permet d'avoir une application distribuée sur les "stores", d'avoir accès au matériel (même si ce dernier n'est pas complet), d'autoriser un fonctionnement en mode déconnecté, pour des performances très correctes. Même si elle ne permet pas d'atteindre le niveau d'expérience utilisateur d'une application native, elle permet, notamment grâce à HTML5 d'avoir une application avancée. Là encore il faut prendre garde au temps de latence entre l’apparition d’une nouvelle fonctionnalité de la plateforme et son intégration dans la couche d’encapsulation.

Conclusion :
Dans un contexte de développement d'une application mobile pour plusieurs plateformes et/ou différents facteurs de forme, il convient de bien analyser les besoins et les objectifs de l'application à développer. Il faut peser les différents critères importants (ex. la performance, l'expérience utilisateur...) afin de choisir la bonne solution. 
Une application très performante, fournissant une expérience utilisateur avancée et utilisant les différents composants matériel du téléphone (GPS, camera, gyroscope, ...) ne pourra pas utiliser une approche de développement cross-plateforme. Elle devra être développée spécifiquement pour chaque plateforme ciblée. En revanche, une application présentant de l'information à un utilisateur, et lui fournissant des données de géolocalisation, et scanner des codes-barres, pourra utiliser l'approche hybride. Les principaux Frameworks du développement cross-plateforme sont PhoneGap et Titanium.

------------------------
[1]
http://www.comscore.com/fre/Press_Events/Press_Releases/2011/9/Android_Captures_number_2_Ranking_Among_Smartphone_Platforms_in_EU5
[2]
http://fr.wikipedia.org/wiki/Compilateur#Compilateur_crois.C3.A9.