Nuxeo et RoboVM : plongez dans la technologie mobile multiplateforme pour iOS et Android avec Java


Thu 23 July 2015 Par Vladimir Pasquier

Big Dive-Jump into waterNous nous efforçons constamment d'améliorer Nuxeo Platform, et dans cette optique, nous avons porté notre attention sur le client d'automatisation mobile Nuxeo. Le client d'automatisation Nuxeo (Nuxeo Automation Client) propose une implémentation haut niveau des clients pour les programmateurs Java et vous simplifie la tâche en gérant tous les détails des niveaux de protocoles.

Depuis le SDK Nuxeo Android et le SDK Nuxeo iOS, notre équipe a voulu découvrir un framework multiplateforme pouvant intégrer le client d'automatisation Nuxeo en tant que simple bibliothèque Java pour les systèmes iOS et Android afin de rendre la conception d'applications sur le client plus rapide et plus efficace pour les développeurs.

C'est la technologie RoboVM qui a attiré notre attention. Voyons pourquoi nous l'avons utilisée et les détails de l'intégration RoboVM-Nuxeo !

RoboVM


Cibler le mobile implique de développer à la fois pour Android et pour iOS. RoboVM permet de développer pour ces deux plateformes :


  • en créant des applications réellement natives pour iOS et Android

  • en utilisant des bibliothèques, des outils et des langages provenant de l'écosystème Java

  • en partageant du code entre les plateformes


L'IDE et les plug-ins RoboVM sont basés sur IDEA EAP 15. Cette version d'Intellij est actuellement en accès anticipé, mais elle peut être téléchargée sur le site officiel IDEA.

Un projet RoboVM a la structure suivante :

RoboVM project structure


  • Android : contient toutes les activités/contrôleurs pour l'application Android

  • iOS : contient toutes les vues/contrôleurs pour l'application iOS

  • Noyau : le noyau est partagé par les couches Android et iOS et peut contenir des gestionnaires de protocole HTTP ou des couches de stockage


Les projets RoboVM, tout comme les projets Android classiques, utilisent Gradle pour gérer les dépendances.

Premier objectif : intégration à Nuxeo


Notre premier objectif a été de faire fonctionner le client d'automatisation Nuxeo à l'intérieur d'un modèle d'application RoboVM. L'intégration dans le noyau du projet a été assez rapide et simple et tout a fonctionné à la fois pour Android et pour iOS. Voici comment nous avons procédé :

Pour Android :

Pour la plateforme de Google, nous avions besoin d'exclure certaines bibliothèques du client d'automatisation qui existaient déjà dans Android sous la forme de bibliothèques Apache, telles que les bibliothèques httpcore ou httpclient. Nous devions ensuite lancer l'application sur Android pour qu'elle fonctionne en supprimant certaines fonctionnalités Apache qui ne sont pas fournies par les bibliothèques Android Apache.

screenshot_2015-07-22_14.44.16

Pour iOS :

Après avoir travaillé sur Android, nous n'avons détecté aucun problème pouvant empêcher le déploiement et l'exécution sur iOS.

Résultat :

Nous avons réussi à créer un projet RoboVM pour les plateformes Android et iOS qui intègre le client d'automatisation Nuxeo afin de développer facilement des applications IPA ou APK.

Vous pouvez jeter un œil au projet ici : https://github.com/nuxeo-sandbox/nuxeo-robovm

Utiliser la bibliothèque Nuxeo pour le développement sur iOS


Après notre travail initial sur RoboVM, nous devions penser aux développeurs natifs iOS et au fait qu'ils devraient pouvoir utiliser la bibliothèque noyau RoboVM au sein de leurs projets Objective-C ou Swift.

Nous avons réussi à externaliser la bibliothèque noyau iOS. Cependant un wrapper et une introspection JNI étaient nécessaires pour pouvoir fonctionner dans un projet iOS (ce qui a augmenté le degré de complexité lors du développement pour que l'application fonctionne).

Intégrer le client d'automatisation Nuxeo à l'aide de RoboVM a été assez simple et une belle réussite. Nous avons pu créer des applications iOS et Android partageant le même noyau de code pour réaliser des appels et interagir avec le serveur Nuxeo Platform. Le travail sur l'externalisation d'une bibliothèque iOS n'était cependant pas des plus simples.

Et la suite ?


Puisque RoboVM compile le code JVM en langage machine pour iOS, la technologie ne nous permet pas de laisser les développeurs iOS développer à l'aide de XCode. Nous avons donc cherché une alternative qui faciliterait grandement leur travail avec le client d'automatisation Nuxeo.

Une technologie a attiré notre attention ! Il s'agit de J2ObjC, qui transpose directement le code Java et le code Objective-C. Nous allons nous pencher plus en détail sur le sujet très prochainement, donc restez à l'écoute pour plus d'informations !


Catégorie: Product & Development
Tagged: Insight, Nuxeo Integration, RoboVM