Développement d'application Mobile

Posté le 17 juillet 2013 - Astuces pour développeurs - Par Grafikart - Proposer une correction

Les applications mobiles prennent de plus en plus de place dans le paysage numérique et les projets mobiles explosent. Le monde du mobile est complètement différent de celui du Web aussi je vous propose de partager mon expérience pour vous aider à faire le bon choix quand au développement d'une application.

Actuellement, il existe 3 solutions pour développer une applications pour mobile et/ou tablette.

Le développement natif

C'est évidemment la première solution qui vient à l'esprit. Le développement natif consiste à développer avec les outils/langages propres à chaque système d'exploitation.

  • Objective C avec l'IDE XCode pour iOS (Il vous faudra nécessairement un mac pour dev et compiler l'app)
  • Java avec Eclipse pour Android
  • C# avec Visual Studio pour Windows Phone

Les composants iOS permettent de couvrir pas mal de casL'avantage de cette méthode c'est que vous allez pouvoir bénéficier des éléments propres à chaque système d'exploitation pour un développement plus rapide et plus propre. On peut même créer ses propres composants en héritant des propriétés des composants natif.

Le développement est assez intuitif grâce à des IDE dédiés (XCode est un des outil de développement les plus agréable à utiliser, on ne peut pas en dire autant de la solution Eclipse…).

En revanche il y a quand même une ombre au tableau. Android devenant de plus en plus utilisé les entreprises souhaitent avoir une application qui fonctionne sur Android ET iOS et cela devient vite très problématique.

  • 2 plateformes = 2 codes complètements différents
  • Un temps de développement multiplié
  • Des mises à jours pénibles à faire (vu qu'il faut reporter la modification entre les plateformes)

Le prix d'un développement natif monte donc en flèche dès lors que vous souhaitez avoir une application qui fonctionne sur plusieurs systèmes. En plus il faut rajouter à ce problème de prix, un temps d'apprentissage assez important (1 à 2 mois par langage) qui peut être problématique pour un freelance (le temps passé à se former n'est pas rentabilisé)

Le développement hybride

Certaines entreprises ont très bien compris le problème de compatibilité et proposent des solutions qui permettent, avec un seul code, de compiler sur les différentes plateformes. La solution la plus connue étant Titanium Platform qui vous permet d'écrire une application en utilisant du javascript et leur API.

Par exemple si on souhaite créer un tableau on utilisera le code suivant

Ti.UI.createTable(…)

Et le système compilera ça dans une tableView sur iOS et Android. L'avantage est multiple :

  • On code avec un langage que l'on connait : le javascript
  • 1 Code = plusieurs plateformes

Mais tout n'est pas rose pour autant. On se rend vite compte que les éléments de l'API qui sont disponibles à la fois sur iOS et Android ne sont pas nombreux. Et même les éléments communs ont un comportement complètement différent d'une plateforme à l'autre. Par exemple un tabGroup aura ses onglets en bas sur une app iPhone et en haut sur une app Android (en plus le rendu est horrible sur android).

Même code, Rendu différent

L'autre problème est la personnalisation assez limité des éléments natif. Il n'y a qu'à voir les centaines de forum de personne essayant de mettre les onglets pour comprendre l'étendu de la problématique.

Selon moi cette solution, bien qu'intéressante sur la théorie s'avère être inutilisable dans le cas d'une app avec un format un peu différent du format natif.

Le développement HTML

Enfin la dernière solution est de développer une application en utilisant les langages web classique : HTML, CSS et Javascript. Alors là je vous vois venir

"Une app HTML ce n'est pas vraiment une application !" - le mec dans le fond

En fait on va pouvoir compiler une app qui ne sera en fait qu'une WebView (une élément qui peut contenir une page Web) dans laquelle on va placer notre app créée en HTML. Pour créer une telle application on peut l'écrire en natif, en hybride (on peut utiliser titanium pour ne créer qu'une webview), ou des solutions clef en mains comme PhoneGap. PhoneGap et Titanium offre quelques API permettant d'intéragir avec le téléphone directement depuis le Javascript.

// Par exemple si l'on souhaite prendre une photo avec le téléphone avec une app PhoneGap // Plus d'info sur la doc : http://docs.phonegap.com/en/2.9.0/index.html navigator.device.capture.captureImage(...)

En revanche, même si notre appli est codé en HTML il y a certains paramètres à prendre en compte :

  • Le téléphone n'a pas le même débit qu'un ordinateur, donc faire attention lorsque l'on charge des contenus distants
  • La puissance est limitée. On évitera d'animer des blocs entier et de surcharger la page de Javascript et d'effet CSS avancés.
  • L'AJAX cross domain est interdit, vous serez limiter à des appels JSONP

Ensuite pour créer votre application ça se passe comme une application Web standard (avec les event touch en plus). On peut s'aider de frameworks javascript comme jQuery Mobile et Sencha Touch ou faire du code 100% maison. Personnellement je ne suis pas convaincu par les frameworks JS pour mobile car trop lourd et assez difficile à personnaliser.

Quelle solution choisir ?

J'ai pu tester les 3 solutions évoqués dans le cadre du développement de plusieurs applications et j'en suis venu à la conclusion suivante.

Si vous souhaitez développer une application spécifique à un système d'exploitation il peut être intéréssant de se former dans le langage souhaité et de développer en utilisant les outils propres au système choisi. Attention cependant si comme moi vous avez été élevé avec les langages Web. Le développement mobile est proche du développement logiciel, vous allez découvrir les joies de la Compilation et de la Gestion de la mémoire

Le développement HTML est selon moi le choix le plus viable de manière générale. Il permet de développer une application assez rapidement et qui fonctionne de la même manière entre les différentes plateforme. Attention cependant aux spécificités des mobiles (débit super lent, une iframe sur iOS n'est pas scrollable, on ne peut pas faire d'Ajax cross domain, position fixed à oublier...). Pour ce qui est de la compilation vous pouvez utiliser au choix PhoneGap ou Titanium (PhoneGap proposant même une compilation sur le cloud, vous envoyez votre html => on vous renvoit l'app compilée).

Enfin, Le développement hybride est selon moi pas très intéréssant car, malgré une promesse intéréssante, on se retrouve vite avec les mêmes inconvénients qu'une app native : Un code par plateforme et des temps de compilations rebutant pendant la phase de debug.