Programmer pour quels smarphones?

Comment programmer un appareil mobile? Quel framework pour faciliter la tâche? Quel langage de programmation utiliser? Peut-on rendre l'application portable? Quel système d'exploitation choisir? Nous allons tenter de répondre à toutes ces questions.

Le nombre d'utilisateurs de smartphones et tablettes, faisant tourner des applications réalisées par de tierces parties, est déjà plus important que le nombre d'ordinateurs de bureau. Il est donc évident qu'un programmeur doit maintenant privilégier ce marché.
Il ne faut pas compter sur la compatibilité avec les systèmes de bureau (même si des émulateurs sont fournis pour developper sous Windows, Mac, Linux). Les interfaces, les écrans sont différents et à moins qu'on ne se limite aux applications dans le navigateur, il faut repenser l'application, et prévoir d'utiliser des APIs différentes.

Les systèmes d'exploitation des mobiles et leur programmation

Les langages et les outils sont différents selon les systèmes d'exploitation. Nous allons les indiquer mais n'entrerons pas ici dans le détail des structures des applications propres à chaque système, elles sont décrites dans leurs centres de développement.

iOS

Le système de l'iPhone fonctionne de préférence avec des applications en langage C ou Objective C, ou en HTML 5.

Après avoir interdit l'utilisation de frameworks tiers (comme Flash) pour réaliser une application qui soit acceptée sur l'AppStore, le 9 septembre 2010, Apple a changé de politique et abandonné toute restriction sur les outils utilisables pour réaliser des applications pour l'iOS.
La clause 3.3.1 pour qu'une application soit incluse dans l'App Store indiquait que le logiciel devait être écrit en Objective C, C++ ou JavaScript et sans sur-couche intermédiaire avec l'API de iOS. Elle fait maintenant partie de l'histoire.

Les statistiques montrent que 80% des développeurs sous iOS n'ont pas assez de revenus pour faire vivre une entreprise et 60% pour compenser le coût de développement. Selon un article récent du Register, il y a 700 000 applications dans l'AppStore, mais 25 font 50% des revenus et viennent de développeurs de jeux comme Disney, Zynga, EA!

Cocoa est l'outil de développement d'Apple et des variations de langage C, avec le framework UIKit.

Android

Le système de Google est maintenant doté d'une base installée très large, égale à celle de l'iPhone aux USA et constitue donc un des deux marchés privilégiés pour le développeur.
Le SDK Android fournit les APIs pour construire des applications. En décembre 2015, OpenJDK a remplacé l'API standard Java avec implémentation par Google. Le kit comprend un émulateur de mobile Android pour tester l'application sous Windows, Mac, Linux.
Le plugin ADT pour Eclipse lui ajoute une IDE.
Le NDK, N pour native, permet d'ajouter du code natif, donc écrit en C, ou autre langage compilé en binaire.
Le langage de programmation originel est Java mais grâce à SL4A il est possible d'utiliser un autre langage tel que C# avec Xamarin.
Cordova est largement utilisé pour réaliser des applications Android en JavaScript.
On peut aussi utiliser la machine virtuelle LLVM grâce notamment au compilateur Snapdragon (à partir de la version 4.3).

Tizen

C'est le successeur de Meego, soutenu par Intel, Samsung, NEC et de nombreuses autres compagnies, il utilise HTML 5 comme interface et Linux comme backend. Le nom est sans doute une abbréviation de "citizen", citoyen en anglais.
Il succède aussi à Limo, une initiative de la Linux Foundation pour un système mobile basé sur Linux.
C'est une alternative à Windows 8 qui fera fonctionner sur tablettes les applications pour Linux et supportera Qt et GTK. Si Microsoft s'en tient à son intention de charger 30% des applications sous Metro, Tizen intéressera surement les éditeurs. Les applications développées en HTML 5 et WAC fonctionneront sur tous les appareils.
Sa disponibilité avec un SDK est prévue pour le premier trimestre 2012.

Firefox OS

Android sur mobile Revolution
Android sur mobile Revolution

La plateforme de Mozilla qui équipe ses premiers modèles en 2013 est la plus ouverte puisque utilisant uniquement les standards du Web. La programmation se fait donc en JavaScript et HTML avec un recours aux API pour utiliser les composants matériels.
Il utilise Linux et Gecko pour le backend, et le tout HTML 5 pour l'interface comporte des avantages:
- Aucune fragmentation.
- Compatibilité avec tous les appareils.
- Gratuité complète au contraire d'Android, car Microsoft fait payer des droits de brevets sur ce dernier.
- Les applications sont en HTML et JavaScript comme l'interface dy système.
Certains appareils comme le Revolution permettent de choisir entre Android et Firefox OS au démarrage, ce qui assure une longévité plus grande puisque les mises à jour du premier sont limitées, pas celles du second.
Firefox OS a été abandonné le 9 décembre 2015.

Windows Phone

On contraire de l'iPhone, le système de Microsoft privilégie l'écriture d'application en C#, mais on peut utiliser le langage C++ également. Les applications tournent sur une version allégée de .NET.
L'interface de WP 7 peut être construite avec Silverlight ou XNA, un framework de jeux.
WP 9 risque d'être incompatible avec WP 8 du fait de l'unification voulue avec Windows.

Blackberry OS

OS 6 de l'ex-RIM (dont le nom devient Blackberry) supporte le multitouch. La programmation se fait en Java ou avec le SDK pour les applications Web.
Qnx est utilisé sur tablette et permet de faire tourner les applications Android pourvu qu'elles soient acceptées sur la plateforme de distribution App World.
Blackberry 10 est basé sur Qnx et lui succède, c'est une plateforme unifiée pour tablettes et smarphones. En 2016, Blackberry s'est tourné vers Android pour ses nouveaux modèles et on peut considérer le système BB10 comme enterré.

WebOS

Basé sur Linux, il supporte la plupart des outils pour Linux dont SDL pour les jeux. WebOS supporte HTML 5, JavaScript, CSS. Il est multitâche. Il inclut Node.js ce qui permet de réaliser des applications vraiment compatible, fonctionnant même sur le bureau.
Le PDK permet d'introduire du code C ou C++ dans les applications. Le SDK inclut un simulateur pour tester les applications sous Windows ou Linux, et Enyo, un framework Ajax comprenant des widgets. On peut ajouter ses propres widgets. Enyo a remplacé Mojo, pour un framework plus rapide et compatible HTML 5, convenant pour les tablettes.

MeeGo/Sailfish

Le système Meego sur Linux (et hébergé par la Linux Fundation) résulte de la fusion de Moblin d'Intel et de Maemo de Nokia.
De nombreux industriels ont rejoint le consortium Meego, système pour sur mobiles, tablettes et netbooks. Un code commun pouvant utilisé pour tous ces matériels.
Abandonné par Nokia, Meego est remplacé par Tizen, supporté par Intel et Samsung qui utilise HTML 5. Le système original continue avec la société indépendante Jolla sous le nom Sailfish OS. Jolla est une entreprise fondée par les ex-employés licenciés en masse. En juillet 2012, il a trouvé un premier fabricant. En août 2013 il a assez de précommande pour démarrer, contrairement à Ubuntu Mobile. Selon les testeurs du premier modèle, distribué en novembre 2013, Sailfish est la plus intuitive de toutes les interfaces pour mobile.

Sailfish utilise le framework Qt et l'on peut le programmer avec l'éditeur Qt Creator. Le MeeGo UI Toolkit est une couche ajoutée à Qt. Il est complétée par Handheld UX pour les mobiles et Neetbook UX pour les tablettes et netbooks.
Le langage de programmation est C++.

Sailfish permet de faire tourner les applications Android.

Maui

Basé sur Linux, c'est un système mixte pour desktop et mobile (ce qu'Ubuntu cherche à être aussi), qui utiliser soit le tactile, soit le clavier et la souris selon la machine. Utilisant les dernières technologies comme Wayland, il est particulièrement réactif.
Pas encore stable, il peut être utilisé pour remplacer un OS dépassé sur un ancien appareil.
Lorsque Wayland aura remplacé X, la même universalité sera possible avec toute distribution Linux.

Symbian (En cours d'abandon)

Symbian 3 est une plateforme open source. Le PDK (Product Development Kit) peut être téléchargé pour construire une application. L'ADT (Application Developent Kit) contient les outils pour développer une application fonctionnant sur Symbian.
Les langages utilisables sont C++ avec Carbide, Java ME avec Eclipse Mobile ou NetBeans Mobility, Python avec PyS60, Ruby avec Symbian Ruby, Flash avec Flash Lite, des widgets utilisant HTML 5. Le support .NET est incertain.

Avec le Nokia Qt SDK, on peut développer et tester des applications sur ordinateur de bureau qui fonctionneront sur Symbian et Meego.

Symbian sera progressivement remplacé par Windows Phone 7 et sans doute par un nouveau système basé sur Linux pour les modèles à bon marché. Le développement de Symbian a été transféré à une société tierce, Accenture en juin 2011.

Les plateformes universelles

On peut maintenant les utiliser sur iPhone tant que les applications ne chargent pas de code exécutable comme peut le faire Flash.

Titanium

Interface de developpement pour Android ou les applications locales. Il dispose de son propre SDK, interface aux APIs du système, qui facilite le port d'une plateforme à l'autre.

Unity3D

Unity est une plateforme de développement et Unity3D une version spécialisée pour les jeux. L'API peut être programmée en JavaScript ou C#.
Ces langages sont compilés en langage natif (ARM) pour les mobiles.
Les mêmes applications peuvent fonctionner sur un navigateur grâce à un plugin. Elles fonctionnent aussi sur Windows et Mac, sur .NET.
En mars 2014, Unity a annoncé le support de WebGL et Asm.js à coté de leur plugin pour navigateur. Cela permet donc des applications fonctionnant sur tout appareil.

Xamarin

Gratuit et open source depuis avril 2016, ce framework C# est inclut dans Visual Studio Community Edition et permet de réaliser des applications pour iOS, Android, Windows, Mac, Linux.

HTML 5

HTML 5 reste la plateforme universelle, fonctionnant sur tous les mobiles sans aucune adaptation du code mais avec des limitations.
Nokia propose un outil de développement pour des applications portables sans code natif.
L'AppStore de l'iPhone a inclu Opera Mini, une version allégée du navigateur, dédiée aux mobiles. Il semble cependant que ce navigateur, ne soit pas une plateforme d'application Web. En effet, Opera Mini 5, s'il supporte SVG et CSS 3, n'a pas de support pour des composants essentiels: Formulaires de HTML 5, Ajax.
Firefox pour Android reconnaît quand à lui 100% de HTML 5. De même le navigateur natif.

React Native

Donné en open source par Facebook en 2015, cette alternative à HTML 5 (ou Swift, Java) permet de créer des applications mobiles natives avec le framework React et JavaScript. 90% du code est commun à iOS et Android.
Le code de l'application est un mélange de HTML et JavaScript.
La plateforme est utilisée par Facebook, Instagram et plusieurs grands sites Web.

Flutter

Ce framework basé sur le langage Dart est maintenant utilisable en 2017 et des auteurs abandonnent déjà leur plateforme native iOS ou Android pour celui-ci, pour profiter des possibilités qu'offre le langage.
Supporte Material Design, la reconnaissance des gestes, des widgets interactifs, etc...

C++ pour mobiles

Microsoft propose de réaliser des applications mobiles écrites en C++ à partir de Visual Studio. Elle peuvent fonctionner su iOS, Android, Windows.

JVM: JUniversal

Proposé étrangement par Microsoft en février 2015, la plateforme JUniversal permet de développer des logiciels en Java qui seront convertis dans le langage approprié au mobile, Android, Windows (C#) ou iOS (Objective C). En fait l'outil avait été développé par des employés de Nokia transféré chez Microsoft avec l'acquisition. Mais l'interface utilisateur doit être écrite en langage natif.
RoboVM était une alternative qui génèrait du code binaire à partir de Java, mais après le rachat de Xamarin par Microsoft, le développement a été abandonné..