Le 19/12/17

Code natif et développement multi-plateforme mobile [1/2] Présentation

Récemment nous avons été conduits à réaliser une étude sur l'utilisation de code natif dans une application mobile qui cible plusieurs plateformes. Dans cette série de deux articles nous allons revenir sur la notion de développement multi-plateformes mobiles dans un premier article, avant de présenter dans un deuxième article, un retour d'expérience, via divers exemples permettant d'utiliser du code natif dans une application mobile multi-plateformes.

La présentation qui suit ne se veut pas exhaustive, elle présente les points que nous avons jugés clés pour comprendre les principes abordés dans le deuxième article.

Avant de définir ce qu'est une application multi-plateformes rappelons quelles sont les principales plateformes mobiles et lesquelles se doit-on de cibler lors du lancement d'un nouveau produit mobile.

Les principales plateformes mobiles

Le monde de la téléphonie mobile (en 2017) est représenté par deux acteurs principaux qui se partagent la quasi totalité du marché : Google avec Android (87.8% par de marché) et Apple avec iOS (11.5%) (source Gartner Novembre 2016). La force principale des systèmes d'exploitations Android et iOS est leur extensibilité via un écosystème applicatif ouvert aux entreprises et créateurs externes. Ces applications sont alors disponibles via un store (App store pour iOS et Play Store pour Android). 

Cette série de deux articles ne traite pas de la plateforme Windows Mobile 10 notamment pour sa faible part de marché (env <1%) mais aussi eut égard de l'aveu d'échec de la part de Microsoft : https://t.co/0CH9TZdIFu https://t.co/ePsySxR3LB

Le développement multi-plateforme

Afin de ne pas réinventer la roue lors de la création d'une application (mobile ou non) lorsqu'on cible plusieurs plateformes il peut être intéressant de passer par un développement multi-plateformes (ou cross-platform). Ce type de développement à l'avantage de factoriser la logique métier et d'abstraire les spécificités de développements propres à chaque plateforme en utilisant un framework (ensemble d'outils pour la création de logiciels). La simplicité gagnée par cette abstraction que propose le framework utilisé pourra conduire dans certains cas au développement de modules spécifiques destinés à combler les lacunes du framework.

Les différentes manières de faire un développement multi-plateforme

1. Full web

La solution la plus simple consiste en la réalisation d'un site web. Toutes les plateformes mobiles disposent d'un navigateur web ainsi il est tout-à-fait possible de créer une application interactive avec les technologies standards du web (HTML/JS/CSS). C'est ainsi que fonctionnent nos produits Cities et Dashboard. Cette solution facilitant le développement présente le désavantage de ne pas pouvoir tirer entièrement partie du support mobile et de certains de ses capteurs : tels que le gyroscope. De plus en passant par un navigateur web le développement hérite de tous les problèmes du développement web : compatibilité sur tous les navigateurs, performances limitées.

 

2. Applications Hybrides

Les applications hybrides sont des applications web développées avec les technologies standards du web mais encapsulées dans une application via une WebView. Cette solution est similaire à la création d'un site web, les problèmes restent les mêmes vu que ces frameworks utilisent les Webview du système sur lequel ils sont déployés. Néanmoins via ces technologies il est possible de développer des modules spécifiques pour proposer des fonctionnalités propres à chaque système. 

Parmi les frameworks existants on peut citer : Apache Cordova et Ionic (qui se base sur Apache Cordova)

3. Frameworks dédiés au développement multi-plateformes

Cette solution consiste à developper de véritables applications natives via un framework qui va abstraire les spécificités propres à chaque plateforme pour proposer des interfaces logicielles de plus haut niveau. Cette solution présente l'avantage d'abstraire les problématiques de développements propres à chaque plateforme en les réduisant au développement de modules spécifiques.

La solution offrant le plus de liberté pour une développement reste l'utilisation de ce type de framework que ce soit pour les performances ou encore la création de modules spécifiques. Cette liberté se paye par l'utilisation d'outils parfois complexes et la familiarisation avec des frameworks offrant de nombreuses fonctionnalités.

Présentation de quelques frameworks dédiés au développement multi-plateformes

Parmi les frameworks dédiés nous allons nous concentrer sur les trois frameworks qui suivent : Unity, Xamarin et React-Native. Nous avons ciblé ces trois framework pour leurs communautés existantes ou grandissantes, leurs supports, leurs utilisations et leurs complexités d'utilisations. 

Nous n'aborderons pas les frameworks comme : Qt ou encore Juce qui pourraient aussi répondre au besoin.

1. Unity

Ce framework est principalement dédié à la conception de jeu vidéo, néanmoins il permet de créer des applications multi-plateformes aussi bien mobiles que bureautiques. L'utilisation d'Unity devient vite limitée lorsqu'il est question de créer une application qui n'est pas un jeu, l'IDE étant centré sur des concepts de "scene" et "assets" propres au Jeu vidéo.

2. React-Native

Ce framework, récemment propulsé par Facebook, propose d'utiliser la simplicité d'utilisation de la technologie React pour créer de véritables applications natives. Ainsi en utilisant ES6 et JSX la création se veut simplifiée et permet de profiter des performances et composants des systèmes mobiles. Côtés points faibles, React-Native reste une technologie relativement nouvelle et dispose d'une communauté encore grandissante, d'autre part React-Native hérite de la license propre à Facebook qui spécifie qu'on ne doit pas utiliser cette technologie dans des produits concurrents de Facebook ou assimilés "The license granted hereunder will terminate, automatically and without notice, if you ... take a direct financial interest in, any Patent Assertion: (i) against Facebook or any of its subsidiaries or corporate affiliates". (https://github.com/facebook/react-native/blob/master/PATENTS).

3. Xamarin Forms

Désormais racheté par Microsoft, Xamarin grand acteur de l'univers .NET sur plateforme Mono (VM .Net open source) propose la solution Xamarin Forms pour créer des applications Android/iOS/UWP. Pleinement intégré à Visual Studio (Windows ou Mac), Xamarin Forms offre une solution logicielle complète pour créer des applications. Son modèle économique reste le principal frein à son utilisation (voir le pricing Visual Studio).

Dans le prochain article...

La suite de cette article (à paraitre très prochainement) proposera un retour d'expérience via une mise en oeuvre concrète des trois frameworks dédiés au développement multi-plateformes. Le cas présenté sera appliqué à une problématique qu'on peut rencontrer lorsqu'on souhaite proposer une application mobile.

 

Article rédigé par Marc-Alexandre Blanchard.