Nuxeo Platformの性能を改善しこれまで以上に効率化を図る中、当社は、モバイルNuxeoオートメーションクライアントに注目しました。Nuxeoオートメーションクライアントは、Javaプログラマ向けのハイレベルのクライアント実装を提供し、あらゆるプロトコルレベルの詳細情報を処理することでタスクを簡素化します。
Nuxeo Android SDKとNuxeo iOS SDKの導入以後、当社チームは、iOSとAndroidの両システムに対応する単一のJavaライブラリとしてNuxeoオートメーションクライアントを統合できるクロスプラットフォームのフレームワークを発見し、開発者によるクライアント上のアプリケーションの構築を迅速化し効率化したいと考えていました。
そこで当社が注目したのがRoboVMです。RoboVMを使用した理由とRoboVM-Nuxeoの統合について詳しく見てみましょう!
RoboVM
モバイルをターゲットにするには、iOSとAndroidの両プラットフォームに対応する開発を行うことになります。RoboVMは、以下のアプローチによって両プラットフォーム用に開発する方法を提供します。
- iOSとAndroidに対応する真にネイティブなモバイルアプリを開発する
- 大規模Javaエコシステムからライブラリ、ツール、言語を活用する
- 各プラットフォーム間のコードを共有する
RoboVM IDEとプラグインはIDEA EAP 15に基づいています。IntelliJのこのバージョンは、今のところ、早期アクセスプログラムですが、IDEAのオフィシャルウェブサイトからダウンロードすることができます。
RoboVMプロジェクトは次の構造を持っています。
- Android:Androidアプリケーション用のアクティビティ/制御機能をすべて含む
- iOS:iOSアプリケーション用のビュー/制御機能をすべて含む
- Core:CoreはAndroidとiOSの両レイヤで共有され、httpプロトコルハンドラやストレージレイヤを含むことができる
Androidの共通プロジェクトなど、RoboVMプロジェクトは、依存関係管理のためにGradleを使用しています。
最初の目標:Nuxeo統合
当社の最初の目標は、RoboVMアプリケーションのサンプル内部でNuxeoオートメーションクライアントを機能させることでした。Coreプロジェクトに統合し、AndroidとiOSの両システム用に機能させるようにするのは、迅速で簡単な作業でした。作業内容は以下のとおりです。
Androidの場合:
Googleプラットフォームの場合、httpcoreやhttpclientのライブラリなど、ApacheライブラリとしてすでにAndroid内に存在していたオートメーションクライアントライブラリを一部除外することが必要でした。ApacheのAndroidライブラリが提供していないApache機能を一部除去することによって、ランタイム実行を機能させるためにAndroid上でアプリケーションを実行する必要がありました。
iOSの場合:
Androidでの動作後に、iOSの展開と実行に関係する欠陥は検出されませんでした。
結果:
AndroidとiOSの両プラットフォームの場合、IPAまたはAPKのアプリケーションを簡単に開発するNuxeoオートメーションクライアントを統合するRoboVMプロジェクトの作成に成功しました。
こちらからそのプロジェクトをご覧ください: https://github.com/nuxeo-sandbox/nuxeo-robovm
iOSの開発にNuxeoライブラリを使用する
RoboVMでの最初の作業後、当社は、Objective-CまたはSwiftプロジェクト内でこのRoboVM Coreライブラリを使用できるiOSネイティブ開発者について考えなければなりませんでした。
当社は、iOSのCoreライブラリの外部化に成功しました。ただしこれは、iOSのプロジェクト内で使用するJNIのラッパーとイントロスペクションが必要でした(このため、アプリケーションを動作させるために開発者側に複雑な作業を発生させることになりました)。
RoboVMを使用して、Nuxeoオートメーションクライアントを統合するのは、非常に簡単で、うまくいきました。呼び出しを行い、Nuxeo Platformサーバと交信するために、同じ共有CoreコードでiOSとAndroidのアプリケーションを作成することができました。しかし、iOSのライブラリの外部化の作業は必ずしも簡単ではありませんでした。
次に必要なこと
RoboVMではiOS用のマシンコードにJavaバイトコードをコンパイルしていますが、iOS開発者がXCodeを使用して開発できるようにすることは目標として設定できませんでした。したがって、Nuxeo Automation Clientで作業を簡略化する代替方法を模索していました。
そんなとき、あるテクノロジーに注目しました。それは、J2ObjCで、直接JavaコードとObjective-Cコード間の入れ換えを行うものです。今後、このテクノロジーを探求していくことになります。今後の進展にご注目ください!