RoboVM: Mit Java iOS-Applikationen erstellen

Java-Programmierern, die ihre Ideen auch auf Apples Mobilgeräten umsetzen wollen, bietet RoboVM neue Möglichkeiten – ganz ohne Sprachlernzwang.

In Pocket speichern vorlesen Druckansicht 3 Kommentare lesen
Lesezeit: 23 Min.
Von
  • Waldemar Cichon
Inhaltsverzeichnis

Java-Programmierern, die ihre Ideen auch auf Apples Mobilgeräten umsetzen wollen, bietet RoboVM neue Möglichkeiten – ganz ohne Sprachlernzwang.

Die entscheidende mobile Plattform der Java-Entwickler ist Android. Viele von ihnen würden jedoch zusätzlich gerne Apps für Apple-Geräte programmieren. Bis vor Kurzem musste man dazu allerdings das von Apple für den Zweck vorgesehene Objective-C erlernen. Nicht nur, dass man dabei auf Annehmlichkeiten Javas wie Garbage Collection oder Reflections verzichten musste. Auch die teils sehr umfangreichen Standardbibliotheken, eigene Snippets und Klassen standen so plötzlich nicht mehr zur Verfügung. Speziell was die Anzahl und Qualität der verfügbaren Bibliotheken betrifft, ist Objective-C dem Angebot für Java deutlich unterlegen.

Aber auch die grundlegenden Implementierungen der Objektorientierung und der Fehlerbehandlung sind in Objective-C vollkommen anders. Selbst die überraschenderweise im Sommer letzten Jahres aufgetauchte Programmiersprache Swift brachte in der Hinsicht keine grundlegende Änderungen, obgleich sie sich wesentlich mehr an Java orientiert. Darüber hinaus scheint es, dass es trotz der aktuellen Versionsnummer 1.2 noch etwas dauern wird, bis der Reifungsprozess und die Integration in die Xcode-IDE abgeschlossen sind. So sind immer noch einige Features, unter anderem simple Refactorings wie Umbenennungen, nur in Objective-C-Projekten verfügbar.

Seit dem Erscheinen des ersten iPhones wurden einige Versuche unternommen, um Java auch auf diese Plattform zu bringen. Technisch ist es zwar auf gejailbreakten Geräten geglückt, den Einsatz auf breiter Front konnte Apple allerdings unterbinden. Das Unternehmen vertritt die Meinung, dass Entwickler auf den mobilen Geräten keine Sprachen außer den eigenen, also Objective C++ und Swift, oder der Websprache JavaScript verwenden sollen.

Mehr Infos

RoboVM: Weiterentwicklung seit der Beta-Phase

Wie im Artikel erwähnt, diente die Beta-Version von RoboVM als Grundlage des Artikels. Seit April unterstützt das Projekt die automatische Interface-Builder-Integration, was die im vorliegenden Text beschriebene manuelle Methode unnötig macht. Entsprechende Hinweise sind in der Dokumentation zu finden.

Die Dokumentation für den Umgang mit den Plug-ins für Maven und Gradle ist ebenfalls online vorhanden.

Oracle versucht an der Stelle zu helfen und geht mit seinem ADF-Mobile-Framework einen ähnlichen Weg wie die zuvor erwähnten Java-Enthusiasten: Dort wird eine dedizierte Java-VM zusammen mit einer mobilen Version des ADF-Frameworks in die Applikation eingebunden. Das widerspricht jedoch einerseits den App-Store-Richtlinien, die keinerlei Interpreter oder Compiler für andere Programmiersprachen gestatten – ganz gleich ob extern oder integriert. Andererseits sieht man den Anwendungen von vornherein ihre Herkunft an. Sie wirken sehr archaisch und sind auf keinen Fall konform zu den Apple-UI-Guidelines, was eine zweite Problemquelle bei der Zulassung zum Vertrieb über den Store darstellt.

Ein weiteres Produkt für den selben Zweck ist "alChemo for iPhone" der Firma innaWorks. Es scheint sich dabei um ein Tool zu handeln, das über eine integrierte VM Java-ME-Anwendungen ausführen kann. Obwohl bereits seit 2008 auf dem Markt, findet man keine Reviews zu dem Produkt, und Blogeinträge oder Kurzartikel geben nur leicht abgeänderte Pressetexte wieder.

2013 hat eine Entwicklergruppe im schwedischen Göteborg die Firma Trillan Mobile mit dem Ziel gegründet, Cross-Plattform-Entwicklung mit Java auch unter iOS zu ermöglichen. Aus ihr heraus wurde das Projekt RoboVM geboren. Trotz des Namens handelt es sich hierbei um keine richtige virtuelle Maschine (VM), sondern um einen Compiler, der vor dem Zusammenlinken der fertigen App den Java-Code in die jeweilige Maschinensprache übersetzt (AOT, Ahead of time compiler).

Das hat zur Folge, dass die VM nicht auf der Zielmaschine vorhanden sein muss und die App-Store-Prüfer die Programme erst einmal nicht als in einer nicht zugelassenen Sprache erkennen und zurückweisen. Da eine fast vollkommene Abdeckung der iOS-APIs gegeben und auch der Interface Builder (mit Einschränkungen) eingebunden ist, sehen die Apps genau so aus, als seien sie mit einer der Apple-Sprachen programmiert.

Natürlich beschränkt sich RoboVM nicht nur auf Java, es lässt sich auch mit allen anderen Programmiersprachen verwenden, die auf der JVM laufen oder entsprechenden Code erzeugen. Darunter fallen zum Beispiel Scala, Groovy, AspectJ, Clojure, JRuby, Jython, Kotlin und Xtend. Da RoboVM in bestimmten Bereichen stark auf Annotationen setzt, die aber in einigen anderen Sprachen fehlen, ist der Einsatz der eigenständigen Sprachen allerdings teils sehr kompliziert und in gewissen Fällen gar vollkommen unmöglich (z.B. Jython von Version 2.5, Clojure).

Die Entwicklungsumgebung richtet sich vor allem an Entwickler mit Android-Background, die beispielsweise ihre Apps übertragen möchten. Zu dem Zweck haben die Anbieter die Apple-Datentypen auf Android- und Java-konforme Grundtypen abgebildet. Auch große Teile der nicht visuellen Android-Bibliotheken sind Bestandteil des Pakets. Obwohl ein AOT-Compiler anstelle einer echten VM verwendet wird, lässt sich so gut wie die gesamte Reflection-API weiterhin nutzen. Lediglich Features, die eine Abhängigkeit zum Class-Loader verwenden oder die Runtime-Generierung von Code einsetzen, werden aus offensichtlichen Gründen nicht unterstützt.

Das Tooling wird wahlweise direkt auf der Kommandozeile oder durch ein Eclipse-Plug-in gestartet. Letzteres ermöglicht es, die Anwendung aus Eclipse heraus auszuführen. Im Anschluss ruft es über eines der Buildwerkzeuge die Tools in der richtigen Reihenfolge auf und startet nach einem Compiler-Lauf den Debugger. Das Plug-in unterstützt die drei unter Java klassischen Build-Werkzeuge Ant, Gradle und Maven. Leider sucht man hier nach brauchbarer Dokumentation, die auch den letzten Stand der Entwicklung widerspiegelt.

Am 16. März 2015 endete die Beta-Phase für RoboVM, womit die dafür gewährten Lizenzen abliefen und Trillian Mobile sein kommerzielles Angebot startete. Lizenzen gibt es seitdem in den vier Größenordnungen Indie, Startup, Business und Enterprise. Die Preise belaufen sich dabei auf jeweils 199, 399, 899 und 1999 US-Dollar im Jahr. Bei den zwei ersten Lizenzen ist auch eine monatliche Zahlung möglich, dann jeweils zu einem Zehntel der Jahrespreises. Die ersten zwei Wochen sind als eine "Trial period" kostenlos. In der Zeit ist auch eine sofort inkraft tretende Kündigung des Dienstes möglich. Den registrierten Beta-Testern gewährte das Unternehmen Sonderkonditionen in Höhe eines Abschlags von 50 Prozent für das erste Jahr.

Zwar lassen sich die Tools von RoboVM von der Kommandozeile aus aufrufen, wesentlich bequemer ist aber der Weg über ein Plug-in für die Entwicklungsumgebung der Wahl. Das ausgereifteste gibt es für Eclipse, aber auch das Plug-in für IntelliJIDEA ist bereits weit gediehen. Die Entwicklung für NetBeans hingegen wurde mittlerweile eingestellt. Da der Autor nur die Version für Eclipse getestet hat, trifft das Folgende primär auf sie zu.

Der Download des Plug-ins wird von einer eigenen Update-Site über einen per Mail zugesandten Link ausgelöst und lädt das benötigte Paket herunter. Nach dem üblichen Neustart der IDE fordert das Programm auf, einen Lizenz-Code einzugeben. Anschließend kann man mit dem Erstellen des ersten Projekts beginnen. Von der RoboVM-Homepage kann man ein sehr kurzes Tutorial mit einem simplen Beispielsprogramm, das bereits von Xamarin bekannt ist, als Einstieg herunterladen. Außerdem verweist die Seite auf einige Beispiel-Apps auf GitHub.