Erfahrungen aus der Cross-Plattform-Entwicklung mit Xamarin, Teil 1: Apps und Frameworks
Seite 2: Unterschiedliche Arten der Cross-Plattform-Entwicklung
Das Beispiel zeigt eindrucksvoll verschiedene Facetten der Cross-Plattform-Debatte. Es ist eine Frage der User Experience und des Eingehens auf plattformspezifische Besonderheiten. Aber auch die Wiederverwendung von Code, der Entwicklungs-Workflow, kurze Releasezyklen und die Plattformabdeckung sind wichtige Aspekte. Mit welchen Mitteln lassen sich Cross-Plattform-Anwendungen jedoch umsetzen? Es gibt dafĂĽr diverse Cross-Plattform-Frameworks, die sich grob in vier Kategorien einteilen lassen: Low-Code und Generierung, Web, hybrid und nativ.
Low-Code und Generierung umfasst eine breite Klasse von Cross-Plattform-Entwicklungsumgebungen. Dahinter steckt die Idee, auch Nicht-Programmierern einen Zugang zur App-Entwicklung zu ermöglichen, indem viele Details hinter WYSIWYG-Editoren (What You See Is What You Get) versteckt bleiben. Bei Low-Code-Ansätzen können Elemente der Nutzeroberfläche einfach in einem Arbeitsbereich angeordnet und sollen dann auch genauso in der fertigen App angezeigt werden.
Auch die Anbindung an Datenquellen wie an eine Datenbank oder ein CRM-System sind, je nach Produkt, möglich. Des Öfteren sind diese speziell an ein Produkt wie Salesforce gebunden. Die Möglichkeiten, ausgefeilte Apps zu erstellen, sind dabei gering, und Entwickler werden sich von Low-Code-Ansätzen schnell eingeschränkt fühlen. Bestimmte Eigenheiten der Plattformen werden nicht berücksichtigt und Fehler sind teilweise nur schwer nachvollziehbar oder lösbar.
Mithilfe von Web-Frameworks wiederum können Entwickler Webseiten so erstellen, dass sie Apps täuschend ähnlich sehen und sich ebenso verhalten. Die Codebasis bilden Webtechniken, also HTML, CSS und JavaScript. Die Arbeit mit modernen Frameworks wie Angular, React, Ionic oder Sencha Touch hat wenig mit der Entwicklung klassischer Webseiten gemein. Das Tooling ist reifer. Automatisiertes Testen ist ebenso möglich wie Continuous Integration. Dennoch bleibt die Ausführungsumgebung des Codes der Browser-Stack, selbst wenn er sich hinter einem App-Icon verbirgt. Funktionen wie das Aufnehmen von Bildern werden über die APIs der Browser aufgerufen und nur die Funktionen, die von den Browsern der Systeme angeboten werden, lassen sich nutzen. Einen guten Überblick dazu liefert die Webseite "Can I Use".
In eine ähnliche Richtung wie Web-Frameworks gehen hybride Ansätze. Das UI der Anwendung wird mit Webtechniken erstellt, aber über spezielle APIs der Frameworks lässt sich plattformspezifischer (sog. nativer) Code aufrufen. Entwickler können so Teile der Applikationen (hauptsächlich UI und Business-Logik) wiederverwenden. Für Anwendungsfälle, die nativen Code benötigen, können sie aber auch plattformspezifischen Code ergänzen. Bekannte Vertreter dieser Gattung sind beispielsweise PhoneGap oder Appcelerator Titanum.
Die vierte Kategorie der Cross-Plattform-Frameworks sind native Frameworks. Dazu zählt auch Xamarin. Dort schreiben Entwickler Code in einer Sprache (z. B. C++), der dann auf die jeweiligen Zielplattformen kompiliert wird oder sich dort nativ ausführen lässt. So entstehen Anwendungen, die plattformspezifischen Code enthalten, ohne dass Entwickler für jede Plattform den Code separat schreiben müssen.
Dieser Ansatz ist insofern komplex, als dass verschiedene Plattformen Ausführungsumgebungen für unterschiedliche Sprachen bieten. Beispielsweise können sowohl Android als auch iOS C- oder C++-Code ausführen, obwohl Java beziehungsweise Swift (früher Objective-C) die eigentlichen nativen Sprachen der Betriebssysteme sind. Manche Frameworks setzen dabei darauf, sämtlichen Code auf verschiedenen Plattformen gleich zu kompilieren, während andere native UI-Elemente erzeugen und den ursprünglichen Code anderer Code-Teile erhalten. Beispiele hierfür sind Unity oder eben Xamarin.
Welches Framework fĂĽr wen?
Bei all der Vielfalt der Framework-Arten sowie deren konkreten Umsetzungen stellt sich in einem Entwicklungsprojekt früh die Frage: "Welches Framework nehme ich denn jetzt?" Die Antwort ist leider dieselbe wie immer in der Softwareentwicklung: "Es kommt ganz darauf an." Aufgrund der großen Unterschiede in den Anforderungen der Apps und des Funktionsumfangs der Frameworks ist es weder einfach noch hilfreich, einen Sieger in einem Vergleich zu küren. Die Schnelllebigkeit der mobilen Welt erschwert es, eine absolute Aussage zu treffen. Stattdessen ist es wichtiger, sich über Kriterien Gedanken zu machen, die beim Finden einer Cross-Plattform-Technik für die jeweilige Anwendung oder Anwendungsdomäne helfen können. All diese Frameworks haben ihre Stärken und Schwächen; entscheidend ist jedoch, wie die Kombination aus Stärken und Schwächen mit dem zu entwickelnden Produkt(-portfolio) zusammenpasst.
Für die Evaluierung von Cross-Plattform-Frameworks bieten sich grundsätzlich die Bereiche Funktionalität, Ausführungsgeschwindigkeit, Entwicklungsprozess, Rentabilität sowie Community und Support an.
Beleuchtet man die Funktionalität näher, gilt es herauszufinden, inwieweit ein Framework vertraute UI-Elemente nativer Apps abbilden kann oder das Erstellen wiederverwendbarer Komponenten unterstützt. Je nach intendierter Anwendung ist auch die Frage nach der Integration in Betriebssystem- und Hardwarefunktionen wichtig. Wie gut kann eine Technik gegebenenfalls auf zugrunde liegende Betriebssystemfunktionen zugreifen? Wie leicht lässt sich eine Anwendung erstellen, die auch als Dienst agieren und Aufgaben ausführen kann, wenn sie gar nicht oder allenfalls im Hintergrund geöffnet ist?
Abschließend fällt in diesen Diskussionsbereich die Betrachtung der Hardwareanbindung: Ist eine direkte 3D-Unterstützung gegeben oder nicht? Wie sieht es mit der Integration von Sensoren wie dem Gyroskop aus? Kriterien aus dem Bereich der Funktionalität sind meist entscheidend für ein Produkt. Insbesondere bei den Möglichkeiten zur UI-Gestaltung ist häufig ein Fokus festzulegen. Der Fokus auf Hardwarenähe wiederum spielt nur für bestimmte Anwendungen eine Rolle.
Ähnlich gestaltet es sich mit der Ausführungsgeschwindigkeit. Eine Anwendung, die sich träge anfühlt, werden Nutzer kaum akzeptieren. Inwieweit allerdings eine besonders hohe Ausführungsgeschwindigkeit benötigt wird, hängt wiederum stark vom Produkt ab. Vielen Apps gemein ist, dass sie häufig nur für kurze Zeit benutzt werden und in dieser Zeit auf den Nutzer reagieren müssen. Daher sind Startzeiten und Reaktionsgeschwindigkeit wichtige Aspekte bei der Auswahl des Frameworks. Wie gut komplexe Inhalte oder Animationen verarbeitet werden oder nicht, spielt wiederum nur für bestimmte Anwendungen eine Rolle. Hinzu kommt, dass Cross-Platform-Frameworks eine gute Ausführungsgeschwindigkeit auf allen
Zielplattformen bieten sollten.