Le développement natif
la solution du développement est certes la plus évidente, mais pas toujours la plus rentable niveau qualité / temps passé. Il est en effet nécessaire de maîtriser deux langages de programmation, et potentiellement trois avec Objective-C et swift. De plus les règles changent régulièrement, surtout dans l’écosystème Apple, mais aussi dans celui de Google. Il est ainsi indispensable de modifier constamment son application (compilation 64 bits obligatoire, https, gestion des icônes et des assets, gestion…).
Avantage :
- Une maîtrise totale du développement
- Du code et une interface spécifique à chaque OS, permettant d’optimiser la performance
- Possibilité d’adapter le code plus facilement selon le device (taille écran, puissance etc.)
Inconvénient :
- Un temps de développement bien plus long, donc un coût supérieur, aussi bien à la conception qu’à la maintenance
- Obligation de s’adapter à chaque changement de règle
Le développement hybride
Le développement hybride consiste à coder son application via un framework (par exemple ionic) qui générera une application mi web mi native. Les vues sont affichées via une webview, qui est une simple intégration du navigateur web du smartphone (Chrome pour Android, Safari pour iOS), et les différents éléments tels que les notifications, la géolocalisation… sont gérés via des plugins codés en natif.
L’énorme avantage est que ces plugins sont pilotés via le Framework avec du code très simple et surtout identique que l’on soit sur Android ou iOS.
Sur le papier, le développement est très rapide, pour ionic par exemple, qui utilise Cordova pour la compilation et les plugins, Angular pour l’architecture (MVC), javascript comme langage et SASS/CSS pour les feuilles de style, il est possible de coder une application simple (type articles de blog par exemple) en quelques lignes de code. Seulement ionic n’est pas magique non plus, et le développement n’est pas aussi simple que la promesse faite.
Premièrement, ionic dépend de beaucoup d’éléments. Cordova, Angular, Phonegap, les nombreux plugins… Quand tout va bien, le développement est très rapide, mais quand une chose ne fonctionne pas, régler le problème devient un parcours du combattant. C’est le cas par exemple quand deux plugins ne fonctionnent pas ensemble, parce que leurs dépendances respective entre en conflit (typiquement sur Android l’un des plugins a besoin des librairies Google de telle version, et l’autre d’une version différente).
Ensuite, même si il n’est pas nécessaire de coder en Objective-C ou Swift, il est tout de même nécessaire d’avoir un mac pour envoyer son application sur le store. ionic ne permet pas de s’affranchir des règles d’Apple et dans une moindre mesure des règles de Google.
De plus, ionic, comme beaucoup de framework open source, n’hésite pas à casser la rétrocompatibilité entre deux versions. Ainsi, ionic 1 et ionic 2+ ne sont pas compatibles. En effet ionic 1 utilise angular 1, et ionic 2 utilise angular 2, or angular a fait le choix avec la version 2 de modifier totalement la syntaxe de son système de template. Par conséquent passer une application de ionic 1 à ionic 2 demande de complètement réécrire le code.
Il est à noter que ionic propose un système cloud sensé simplifier la vie des développeurs, en permettant de générer les applications sur leurs propres serveurs. Il est ainsi possible de se passer d’Xcode pour envoyer son application sur le store iOS, car le service génère directement un IPA et un APK, qu’il faudra télécharger. Bonne idée, seulement dans les faits, pour l’avoir utilisé pendant un an, je trouve qu’il est beaucoup plus simple de gérer soit même son application via Xcode et Android studio. La génération sur le cloud est en effet plus compliqué puisque la configuration (version de JAVA, de Xcode etc.) n’est pas forcément la même que celle sur son MAC/PC, et évolue sans crier gare. Il est donc possible de tomber sur une erreur de compilation surprise pour son application, alors que la veille tout compilait correctement et que rien n’a été changé dans le code. De plus le service cloud, gratuit au début, est passé en payant en cours de route.
Quand à certains services du cloud , ils ont purement disparus de la circulation, c’est le cas du service d’envoi de notification de ionic. Trop peu fiable (les notifications arrivaient parfois 5 – 10 minutes en retard), ce n’est pas une énorme perte, mais il vaut mieux éviter d’être dépendant d’un service pouvant disparaître du jour au lendemain (ou devenir extrêmement cher), et gérer soit même l’envoi de notification.
Malgré tous ces défauts, ionic reste un framework très efficace, et le système de plugins peut parfois grandement simplifier la vie. Pour prendre un exemple, Google a décidé de passer son service de notification de GCM (Google Cloud Message) à FCM (firebase cloud messaging). Avec ionic il suffit de mettre à jour le plugin de notification pour passer automatiquement en FCM, sans changement dans le code. Pratique.
Avantage :
- Très rapide à développer
- Maintenance simplifiée
- Demande moins de compétence pour tout maîtriser
Inconvénient :
- Beaucoup de dépendance. Si l’une de ces dépendances a un problème…
- Vraiment moins performant sur les smartphone entrée de gamme que du code natif
- Limité dans les fonctionnalités par rapport à du natif
Les progressive Web App
Le principale frein aux PWA était la réticence d’Apple à implémenter les service worker, ce qui se comprend aisément, puisque la démocratisation des PWA signifierait la fin des stores Apple et Google. Seulement la pression est devenu trop forte, et Apple a fini par s’y mettre, ne voulant pas devenir la marque ringarde qui a 2 trains de retard face à son plus grand rival, Google. Microsoft en a suffisamment souffert avec son Internet Explorer qui a mis des années avant de rattraper son retard, et qui est passé d’une quasi hégémonie dans les années 2000 à un petit 7% de part de marché en 2018. De même la confiance n’étant plus là, ça n’a pas aidé la firme à imposer son Windows Phone au grand public. Au final Google a littéralement avalé Microsoft dans beaucoup de domaine, que ce soit OS mobile, moteur de recherche ou navigateur internet.
Apple l’a bien compris et a décidé de ne pas rater la prochaine grande révolution du mobile, les PWA. Pour les développeurs mobiles, les PWA représentent en quelques sorte le paradis. Plus de système ultra fermé à la Apple ou Google à gérer. La PWA peut être hébergée sur son propre serveur, et mis à jour quand bon nous semble, sans validation parfois très arbitraire et même complètement injuste d’Apple (l’application d’un de mes clients a déjà été refusée sur le store parce que le mot « Android » apparaissait dans une des news affichées sur l’app…).
De plus les fonctionnalités des PWA deviennent de plus en plus complète. Les notifications sont gérées pour Android (toujours pas pour iOS, mais Apple a annoncé qu’elles seront bientôt gérées), le cache peut également être effectif, ainsi que la géolocalisation et la plupart des fonctionnalités classiques liées aux mobiles… Au final, le PWA est suffisant pour la majorité des applications. Il faudra par contre voir comment va s’organiser le marketing et le SEO autour. En effet pour Apple il n’existait qu’un store officiel, les PWA permettront l’émergence de nombreux stores différents, puisque l’écosystème ne sera plus verrouillé. De même le SEO deviendra plus important, puisque accessible plus facilement par les moteurs de recherche.
Avantage :
- Très rapide à développer
- Maintenance simplifiée à l’extrême car pas de store à gérer
- Demande moins de compétence car on reste sur du full web
- Possibilité de faire du SEO bien plus facilement
- Écosystème ouvert et au revoir les 30% de com d’Apple et Google
Inconvénient :
- Pas encore compatible à 100% avec Safari
- Limité dans les fonctionnalités (pas de bluetooth par exemple), réservé aux petites appli
- Perd la visibilité des stores
Pour finir, il faut noter que ionic permet de générer très facilement une PWA, ce qui est un excellent point pour utiliser ionic et être prêt lorsque le grand tournant arrivera (probablement l’année prochaine ou en 2020).
Si vous voulez un exemple d’application générée avec ionic, vous pouvez les visualiser ici :
Cert le développement hybride est peu coûteux et très rapide à mettre en place, mais le choix n’est pas automatique ça dépend du nombre de facteurs à prendre en considération.