Big Dive-Jump into waterAs we constantly strive to make the Nuxeo Platform better and more efficient than ever, we turned our attention to the Mobile Nuxeo Automation Client. The Nuxeo Automation Client provides a high-level client implementation for Java programmers and simplifies your task by handling all protocol level details.

Since Nuxeo Android SDK and Nuxeo iOS SDK, our team wanted to discover a cross-platform framework that can integrate the Nuxeo Automation Client as a single Java library for both iOS and Android system to make it faster and more efficient for developers to build applications on top of the client.

The technology that caught our attention was RoboVM. Let’s dive deeper into why we used it and the RoboVM-Nuxeo integration details!

RoboVM


Targeting mobile means developing for both Android and iOS. RoboVM provides the way to develop for both platforms:


  • By creating truly native mobile apps for iOS and Android

  • By using libraries, tools, and languages from the vast Java ecosystem

  • By sharing code between platforms


RoboVM IDE and plugins are based on IDEA EAP 15. This version of Intellij is currently an early access program but can be downloaded from the official IDEA website.

A RoboVM project has the following structure:

RoboVM project structure


  • Android: contains all activities/controllers for Android application

  • iOS: contains all views/controllers for iOS application

  • Core: the Core is shared by both Android and iOS layers and can contain http protocol handlers or storage layers


RoboVM projects, such as common Android projects, use Gradle for dependency management.

First Goal: Nuxeo Integration


Our first goal was to make the Nuxeo Automation Client work inside a RoboVM application sample. It was pretty quick and easy to integrate in the Core project and make it work for both Android and iOS. Here’s what we did:

For Android:

For the Google platform, we needed to exclude some Automation Client libraries that already existed within Android as Apache libraries, such as httpcore or httpclient libraries. Then we had to execute the application on Android to make its runtime execution work by removing some Apache features which are not provided by apache Android libraries.

screenshot_2015-07-22_14.44.16

For iOS:

After our work on Android, we didn’t detect any defects around iOS deployment and execution.

Result:

For both Android and iOS platforms, we successfully created a RoboVM project integrating Nuxeo Automation Client to develop IPA or APK applications easily.

You can check out the project here: https://github.com/nuxeo-sandbox/nuxeo-robovm

Using Nuxeo Library for iOS Development


After our initial work on RoboVM, we needed to think about iOS native developers who should be able to use this RoboVM Core library within their Objective-C or Swift projects.

We successfully externalised an iOS Core library. However, it needed a JNI wrapper and introspection to be used within an iOS project (this brought some complexity on the developer’s side to make the application work).

Integrating Nuxeo Automation Client using RoboVM was quite easy and successful. We were able to create iOS and Android applications with the same sharing Core code to make calls and interact with the Nuxeo Platform server. But the work on externalisation of an iOS library was not the easiest.

What’s Next?


As RoboVM is compiling JVM byte code to machine code for iOS, it couldn’t set our goal to let iOS developers develop using XCode. So, we set out to find an alternative that will make their work with the Nuxeo Automation Client much easier.

One technology caught our attention! It’s J2ObjC, which does transpositions between Java code and Objective-C code directly. That’s what we will be looking into shortly. So stay tuned for more updates!