Eine App für alle Plattformen

Von Christian Eder

Heute kann ein Programmierer diverse Möglichkeiten der plattformübergreifenden App-Entwicklung nutzen. Das bringt jedoch nicht nur Vorteile mit sich.

Artikel erschienen in Swiss IT Magazine 2012/07

     

Write once – run anywhere.» Dieser Java-Slogan ist auch das Versprechen der meisten sogenannten Cross-Platform-Development-Frameworks. Die Nachteile nativer Entwicklung liegen auf der Hand, wenn man einen Blick auf den aktuellen Markt der Mobilgeräte wirft. Ausser den Platzhirschen iOS und Android tummeln sich dort neben Blackberry und Windows Phone 7 auch noch viele Geräte mit Nokias Symbian OS oder Samsungs Bada.
Mit der Entscheidung, native Apps für eine einzige Plattform zu entwickeln, verzichtet man auf einen Grossteil der potentiellen Zielgruppe. Die gleichzeitige Entwicklung mehrerer nativer, identischer Apps für verschiedene Zielplattformen stellt viele Anbieter vor Probleme. Die beiden meist genannten Schwierigkeiten sind fehlendes Know-how und hohe Kosten. Jede der Zielplattformen hat ihre eigene Entwicklungsumgebung, ein anderes Framework und verschiedene Programmiermodelle und -sprachen. Das notwendige Wissen zur Entwicklung nativer Apps auf diversen Plattformen muss häufig erst zeit- und kostenintensiv aufgebaut werden. Ob sich diese Investition lohnt, ist angesichts des fragmentierten und sich schnell wandelnden mobilen Marktes schwer vorauszusagen. Neben den hohen Kosten der Einarbeitung in mehrere Plattformen scheuen viele auch die Zusatzkosten durch die mehrfache Entwicklung. Doppelte Code-Basis wird mit doppelten Kosten assoziiert.

All diese Probleme wollen diverse Frameworks mit der Entwicklung plattformunabhängiger Apps lösen. Viele dieser Frameworks basieren auf der Grundidee, die App als Website mit Web-typischen Mitteln wie HTML5 und Javascript zu entwickeln. Diese wird dann in der App angezeigt. Solche Frameworks versprechen beispielsweise, dass Web-Entwickler ihr bestehendes Know-how mit geringem Zusatzaufwand für die Entwicklung von Apps einsetzen können. Die Entwicklungskosten sollen durch folgendes Prinzip gesenkt werden: «Write once – run anywhere». Das Ziel ist eine einzige Code-Basis, die auf allen Plattformen ausführbar ist.
Doch lohnt sich der Cross-Platform-Ansatz wirklich? Ist die native oder die Cross-Platform-Entwicklung besser? Um diese Frage zu beantworten, muss man sich zunächst fragen: Was bedeutet besser in diesem Kontext? Schnellere Entwicklungszyklen? Einfachere Wartbarkeit? Bessere User Experience? Die Definition bestimmt massgeblich darüber, ob eine Cross-Platform-Entwicklung in einem Projekt sinnvoll ist.
Die folgenden drei Frameworks sind für die plattformunabhängige Entwicklung von Apps üblich: «Phonegap», «Rhodes» und «Monotouch». Alle drei gehen unterschiedliche Wege und jede Vorgehensweise bietet ihre eigenen Vor- und Nachteile.

Die Frameworks

-Phonegap
Phonegap ist ein kostenloses Open Source Framework, das eine einheitliche Javascript-Programmierschnittstelle für den Zugriff auf die Hardware verschiedenster Mobilgeräte bietet. Die verwendete Schnittstelle entspricht dabei genau dem im Rahmen von HTML5 definierten Standard. Dies wirkt sich positiv auf die Zukunftsfähigkeit von Phonegap-Anwendungen aus. Sobald die Webbrowser der verschiedenen Hersteller diese Standards implementieren werden, kann die Phonegap-Schnittstelle durch die des Browsers ersetzt werden. Dabei muss der Code der App nicht mehr verändert werden.
Phonegap unterstützt aktuell die Plattformen iOS, Android, Blackberry, WebOS, Windows Phone 7, Symbian und Bada.
Die Logik der App wird in Javascript entwickelt. Über die Schnittstelle von Phonegap kann aus Javascript heraus auf diverse Features der mobilen Geräte zugegriffen werden. Der Zugriff auf diese Features ist über Plug-ins gelöst. Falls eine bestimmte Funktionalität in Phonegap nicht implementiert ist, kann diese nachgerüstet werden. Bereits in Phonegap enthalten sind Schnittstellen zum Zugriff auf folgende Gerätekomponenten: Kamera, Kontaktdaten, SD-Speicher, GPS-Sensoren, Accelerometer, Netzwerkverbindungen, Soundausgabe, Vibration und Kompass.


- Rhodes
Rhodes ist ebenfalls kostenlos und Open Source. Genauso wie Phonegap bietet Rhodes eine vereinheitlichte Schnittstelle zum Zugriff auf die Geräte und setzt zum Oberflächendesign auf HTML5. Implementiert werden Rhodes-Apps allerdings nicht in den plattformspezifischen Entwicklungsumgebungen. Stattdessen kommt das auf Eclipse basierende Rhostudio zum Einsatz, das ebenfalls kostenlos vertrieben wird. Der wichtigste Unterscheidungspunkt zwischen Rhodes und Phonegap ist die Programmiersprache. Rhodes Apps werden in Ruby entwickelt. Web-Entwickler, die Erfahrungen mit Ruby on Rails haben, werden sich heimisch fühlen.
Rhodes unterstützt die Plattformen iOS, Android, Blackberry, Windows Mobile sowie Windows Phone. Die Programmierschnittstelle von Rhodes bietet Zugriff auf GPS, Kontakt- und Kalenderdaten, Kamera, Bluetooth und NFC. Zudem wird jede Rhodes-App mit einer eigenen Datenbank ausgestattet, auf die über einfache Methodenaufrufe zugegriffen werden kann.

- Monotouch
Monotouch geht einen gänzlich anderen Weg als Phonegap und Rhodes. Statt auf HTML5 setzt Monotouch komplett auf die nativen Möglichkeiten für das Design der Benutzerschnittstelle. Entwickelt man eine iOS-App mit Monotouch, erstellt man die Oberfläche also weiterhin als .xib- oder .storyboard-Datei im Interface Builder von Apple. Wird eine Android App erstellt, gestaltet man die Oberfläche in der gewohnten .xml-Layout-Datei.
Der Unterschied zur nativen Entwicklung liegt bei Monotouch in der verwendeten Programmiersprache. Monotouch Apps werden in C# geschrieben. Einerseits vereinfacht dies für Entwickler mit .NET-Erfahrungen den Einstieg. Andererseits ermöglicht der Einsatz von Monotouch die gemeinsame Verwendung der plattformunabhängigen Code-Teile auf verschiedenen Plattformen. So kann beispielsweise der Benutzeroberflächen-Code plattformspezifisch entwickelt und die Funktionslogik der App geteilt werden. Somit wird diese nur einmal entwickelt.
Monotouch unterstützt derzeit nur die Zielplattformen iOS und Android. Windows-Phone-Apps können sich allerdings ebenfalls Code mit Monotouch-Apps teilen. Die Android-Variante von Monotouch wird «Mono for Android» genannt.

Die Frameworks im Vergleich

Ein Vergleich verschiedener Entwicklungs-Frameworks ist zwangsläufig subjektiv. Es ist wichtig, sich zunächst Gedanken über die Anforderungen zu machen. Nur so kann eine qualifizierte Entscheidung getroffen werden: Für oder gegen native Entwicklung oder für oder gegen den Einsatz des einen oder anderen Cross-Platform-Frameworks. Neben den Anforderungen hinsichtlich Funktionalität, Design und Performance der App sind weitere Aspekte entscheidend, wie das verfügbare Budget oder die Vorkenntnisse des Entwickler-Teams.


- Entwicklungsaufwand
Ein Argument wird in der Diskussion um Cross Platform Development immer wieder angeführt. Es ist die mögliche Kostenersparnis bei der Entwicklung einer App, die auf allen Zielplattformen gleichermassen lauffähig ist. Auf den ersten Blick erscheint dies logisch. Spart man sich mit einer einheitlichen Code-Basis doch eine Menge Entwicklungs- und Testaufwand. Langfristig kann der Aufwand zum Testen einer plattform-übergreifenden App allerdings sogar höher sein als derjenige zum Testen mehrerer nativer Apps. Schliesslich muss die App auf allen Zielgeräten einzeln getestet werden, beispielsweise wenn ein Fix für einen Bug eingespielt wird. Dies gilt auch dann, wenn der Bug lediglich auf einer einzigen Zielplattform auftritt, da der Fix aufgrund des Cross Platform Development alle Plattformen betrifft.

In der Praxis hängt das Kostenverhältnis zwischen nativer und Cross-Platform-Entwicklung stark von den Anforderungen sowie der Team-Zusammensetzung ab. Wer mit einem Team von erfahrenen Web-Entwicklern eine einfach gehaltene Newsreader-App entwickeln möchte, kann mit Phonegap oder Rhodes sehr schnell und kostengünstig eine grosse Basis an Zielplattformen und Nutzern erreichen. Anders sieht es bei einem Unternehmen aus, das über einen längeren Zeitraum hinweg hochwertige Apps mit hohen Anforderungen an Design und User Experience plant. Hier lohnt sich langfristig die Investition in die Anstellung und Ausbildung eines Teams von Experten für die jeweiligen Zielplattformen. Monotouch wiederum erleichtert Entwicklern mit Erfahrungen im .NET-Umfeld den Einstieg. Es ermöglicht zudem Einsparungen durch die Verwendung einer teilweise gemeinsamen Code-Basis aus verschiedenen Plattformen.

- User Experience
Die Zufriedenheit des Benutzers mit einer App – und damit auch ihr Erfolg am Markt – wird von verschiedenen Faktoren beeinflusst. Ein positives Erlebnis bei der Benutzung einer App haben Anwender, wenn


-das Bedienkonzept sich nahtlos einfügt in das, was der Anwender auf seinem Gerät gewohnt ist.
-das Design sowohl ansprechend als auch plattform-konform ist.
-die App flüssig reagiert.

Es widerspricht der plattformunabhängigen Entwicklung, dem Nutzer ein plattformspezifisches Bedienkonzept zu bieten. Dennoch besitzen einige der Frameworks durchaus die Möglichkeiten, die Oberfläche der App gerätespezifisch zu entwickeln.

Monotouch stellt eine Besonderheit dar, da hier die Benutzeroberfläche mit den Tools und Steuerelementen der jeweiligen Plattform gestaltet wird. Monotouch macht es dem Entwickler somit besonders einfach, dem Nutzer eine optimal an die jeweilige Plattform angepasste Oberfläche zu bieten. Der Preis dafür ist allerdings ein höherer Entwicklungsaufwand. «Write once, run anywhere» gilt bei Monotouch nicht für die Benutzerschnittstelle.
Phonegap bringt keine eigene Unterstützung zum Design der Oberfläche mit. Der Entwickler hat allerdings alle Möglichkeiten, die Benutzeroberfläche mittels Cascading
Stylesheets plattformspezifisch zu gestalten. Über das Einbinden unterschiedlicher Stylesheets für die verschiedenen Zielgeräte oder per CSS Media Queries lässt sich somit in Grenzen ein zur Plattform passendes Design umsetzen.
Auch Rhodes verwendet zur Gestaltung der Oberfläche HTML und CSS. Darüber hinaus bietet Rhodes die Möglichkeit, einzelne Views und somit einzelne HTML-Dateien plattformspezifisch zu erstellen. Anhand des Datei-
namens erkennt Rhodes bereits bei der Erstellung der App für jede Zielplattform, welche Version der View verwendet werden soll.
Ob dem Nutzer eine App flüssig erscheint, hängt im Wesentlichen davon ab, wie performant die Darstellung der Oberfläche abläuft. Bei aufwendigen Berechnungen hat ausserdem auch die Ausführungsgeschwindigkeit von Code einen Einfluss.
Die Programmiermodelle wurden hinsichtlich der Ausführungsgeschwindigkeit komplexer Berechnungen beurteilt. Unter Performance-Gesichtspunkten liegen mit Monotouch entwickelte Apps gleichauf. Im Falle von Android liegen sie sogar vor nativ entwickelten Apps. Monotouch-Apps für iOS werden direkt in nativen ARM-Code übersetzt und sind somit ähnlich performant wie direkt in Objective-C geschriebene Anwendungen.
Der in Phonegap-Apps implementierte Javascript-Code wird je nach Zielplattform unterschiedlich schnell ausgeführt. Auf Android-Geräten ist Javascript der nativen Implementierung sogar überlegen. Unter iOS ist die native Variante rund neunmal schneller als Javascript, unter Windows Phone 7 sogar 50-mal. Ein weiterer Performance-Test zeigt, dass das Erzeugen von Objekten unter Javascript auf allen Plattformen wesentlich performanter abläuft als in den jeweiligen nativen Sprachen.
Die Ausführungsgeschwindigkeit von Code ist aber gerade bei Apps oft nicht das Mass aller Dinge. Mehr Bedeutung sollte einer flüssig zu bedienenden Benutzeroberfläche beigemessen werden. Die gefühlte Geschwindigkeit einer HTML-Seite hängt wesentlich von der verwendeten Browser-Komponente ab. Sie erreicht in der Regel bei weitem nicht die Flüssigkeit einer nativ entwickelten App.
Die Ausführungsgeschwindigkeit des Ruby-Codes von Apps auf Basis des Rhodes-Frameworks stellt auf allen getesteten Plattformen deutlich das Schlusslicht dar. Die von Rhodes verwendete Rendering-Engine ermöglicht allerdings zumindest unter Android wesentlich geschmeidigere Animationen als bei Phonegap.

Wo Licht ist, ist auch Schatten

Die plattformübergreifende App-Entwicklung feiert aktuell in der Entwicklerszene einen grossen Durchbruch, insbesondere mit Webtechniken wie HTML5, CSS und Javascript. Die Verwendung altbekannter und standardisierter Techniken und Tools stellt eine hervorragende Basis zur Entwicklung von Anwendungen dar, die theoretisch auf allen aktuellen und zukünftigen Plattformen ausführbar sind.
Doch wo Licht ist, ist auch Schatten. Die Browser der verschiedenen Geräte unterscheiden sich teilweise noch deutlich in der Unterstützung der HTML5-Standards. Die standardisierten Programmierschnittstellen für den Zugriff auf die Hardware der Geräte sind noch in keinem der mobilen Browser vollständig umgesetzt. Als Workaround für diese Unzulänglichkeiten in der HTML5-Unterstützung bieten sich Frameworks wie Phonegap an. Sie stellen eine Implementierung der fehlenden Schnittstellen bereit.
Neben diesen technischen Erwägungen ist im Vorfeld eines Entwicklungsprojektes auch zu prüfen, ob mit der einzusetzenden Entwicklungsplattform die nichtfunktionalen Anforderungen an die App realisierbar sind. Insbesondere unter dem Gesichtspunkt der Oberflächen-Performance sind die HTML5-basierten Lösungen noch nicht annährend mit nativen Apps gleichauf. Sowohl in der Plattform- und Browser-übergreifenden Unterstützung von HTML als auch bei der Performance sind in den nächsten Monaten und Jahren grosse Fortschritte zu erwarten. Dies ist nicht zuletzt der Popularität des Web-App-Modells zu verdanken.
Einen Sonderweg geht das Monotouch-Framework. Es schlägt die Brücke zwischen den plattformspezifischen Benutzeroberflächen-Frameworks und einem plattformunabhängig entwickelten Businesslayer. Auch in Sachen Performance brauchen sich Monotouch-Apps nicht vor nativen Apps zu verstecken. Wer die Lizenzkosten für Monotouch nicht scheut und Erfahrungen mit .NET hat, sollte auf jeden Fall einen Blick riskieren.



Artikel kommentieren
Kommentare werden vor der Freischaltung durch die Redaktion geprüft.

Anti-Spam-Frage: Wieviele Fliegen erledigte das tapfere Schneiderlein auf einen Streich?
GOLD SPONSOREN
SPONSOREN & PARTNER