Strategien für die Entwicklung von Cross Platform Apps

Erstellt: 06.04.2015 von Roberto De Simone
Aktualisiert: 09.09.2016

Die Entwicklung von Apps ist für Unternehmen unerlässlich geworden. Zumindest Android und iOS müssen heute unterstützt werden. Und, man darf das Web nicht vergessen - viele Benutzer möchten einen Service über den Browser nutzen! Daraus ist für Softwareentwickler eine heterogene IT Landschaft entstanden. Dies hat einen Markt für Anbieter von Entwicklungswerkzeugen geschaffen, welche die Entwicklung von Cross Platform-Anwendungen vereinfachen sollen. Dieser Blog untersucht einige der prominentesten Werkzeuge.

Das Bild zeigt Symbole für Werkzeuge um Apps für Android, iOS und Windows erstellen zu können

Die Notwendigkeit von Cross Platform-Entwicklungswerkzeugen

Die heterogene IT Landschaft, Kostendruck, Wartungsprobleme und der Mangel an Mitarbeitern mit breiten Programmierfähigkeiten hat einen Markt für Cross Platform-Entwicklungswerkzeuge kreiert. [Neben der Entwicklung der Benutzerschnittstelle, welche das Thema dieses Blogs ist, besteht auch die Notwendigkeit, eine Strategie für das Backend festzulegen. Dies kann die App-Entwicklung unterstützen und vereinfachen. Web Services (APIs) und Cloud Services gehören zu diesem Themenbereich.]

Werkzeuge und Konzepte für die Entwicklung von Apps

Meiner Meinung nach gehören die nachfolgend aufgeführten Werkzeuge bzw. Konzepte aktuell zu den beliebtesten Tools für die App-Entwicklung (natürlich gibt es weitere):

  • Native Werkzeuge
  • Xamarin
  • Hybrid Apps (Apps mit einem nativen Rahmen und mehreren WebViews)
  • Cordova/PhoneGap Apps
  • (React Native / NativeScript)

Die nachfolgende Graphik versucht die Apps, welche mit den aufgeführten Werkzeugen bzw. Konzepten programmiert werden, nach ihrer Qualität und Entwicklungsproduktivität zu positionieren, wenn für mehrere Plattformen entwickelt werden muss. Am Ende ist das Entscheidende aber immer die Fähigkeit der Entwickler, mit ihren Werkzeugen umzugehen.

Die Grafik positioniert die erwähnten Entwicklungswerkzeuge hinsichtlich Produktivität und Qualität

(Für React Native braucht es eine spezielle Bemerkung: Die Positionierung von React Native ist im Moment nur eine Annahme, welche auf den ersten Versuchen mit diesem Werkzeug basiert. React Native wird im Moment sehr stark beachtet und dessen Konzept ist vielversprechend. Aus diesem Grund kann nicht darauf verzichtet werden, dieses Werkzeug zu erwähnen.)

Die nativen Werkzeuge

Ein Unternehmen mit genügend Budget und Mitarbeitern, welches das maximal mögliche Benutzererlebnis sucht und unabhängig von Drittherstellern sein möchte, wird nach wie vor die nativen Werkzeuge einsetzen. Sicherheitsaspekte werden dabei ebenfalls eine wesentliche Rolle spielen. Dabei wird für jede Plattform ein eigenes Entwicklungsteam benötigt. Es ist offensichtlich, dass dieser Entwicklungsansatz unter jeglichem Aspekt sehr kostspielig ist.

Xamarin

Mit der Hilfe von Mono - eine Implementierung der .NET Laufzeitumgebung, welche mit der App gebündelt wird - werden alle nativen APIs so abgebildet, dass diese mit C# verwendet werden können. Die Bündelung von Mono mit der App ist der Grund dafür, dass Xamarin Apps grösser sind im Vergleich zu Apps, welche mit den nativen Werkzeugen erstellt wurden - siehe diesen Link für Erklärungen. Die App-Grösse ist ein Problem, welches nicht zu vernachlässigen ist - schlanke Apps, welche rasch geladen werden können, sind generell zu bevorzugen.

Im Vergleich zu den nativen Werkzeugen muss nur eine Programmiersprache gelernt werden. Theoretisch kann alles was mit Objective-C/Swift oder Java möglich ist auch mit C# erfolgen. In der Praxis gibt es allerdings Inkompatibilitäten, für welche Umgehungslösungen akzeptiert werden müssen. Auch auf das aufwendige Lernen der unterschiedlichen APIs und der Betriebssystemkonzepte kann nicht verzichtet werden. Xamarin hat sich zu Beginn auf ein “einmal lernen - überall entwickeln” Ansatz konzentriert. Mit der Einführung von Xamarin Forms wurde eine zusätzlich Schicht über Xamarin gelegt. In der Theorie erlaubt dies einen “einmal programmieren - überall ausführen” Ansatz. In der Praxis wird immer noch plattformspezifischer Code benötigt. Xamarin Forms wird sich weiterentwickeln und in der Zukunft könnte ein einheitlicher Code für alle Plattformen möglich sein. Die Qualität von Xamarin Apps ist hoch, da es sich schlussendlich um Apps handelt, welche die nativen APIs verwenden. Ebenfalls positiv zu erwähnen ist, dass es sich bei Xamarin mittlerweile um ein etabliertes Unternehmen handelt, welches Kontinuität verspricht. Für die Entwicklung von Web Apps bietet Xamarin keine Synergien.

Hybrid Apps

Hybrid Apps sind eine Kombination aus nativem Code und Web Technologien. Die grundsätzliche Idee von Hybrid Apps ist die Erstellung eines Rahmens mit nativen APIs: Kopfleiste, Fussleiste, Tabs, Menüs und Seitenwechsel werden mit nativem Code entwickelt. Seiteninhalte werden mit Webtechnologien entwickelt - jede Seite hat ihren eigenen WebView. Mit diesem Konzept können hochwertige Apps erstellt und gleichzeitig Synergien zwischen den einzelnen Projekten geschaffen werden. Dieser Entwicklungsansatz benötigt immer noch das Knowhow der nativen Werkzeuge (in einem begrenztem Ausmass), und es müssen verschiedene Quellen-Codes unterhalten werden. Soll auch der Browser unterstützt werden, gibt es Synergien, weil “nur” noch ein nativer Rahmen für die Web App erstellt werden muss.

Cordova/PhoneGap Apps

Cordova Apps erfreuen sich einer sehr grossen Beliebtheit, weil die Produktivität der App-Entwicklung extrem hoch ist - mit einem einmaligen Entwicklungsaufwand können alle Plattformen unterstützt werden. Cordova Apps gehören ebenfalls zu den Hybrid Apps - allerdings ist der Anteil von nativem Code sehr klein. Kopfleiste, Fussleiste, Tabs, Menüs und Seitenwechsel einer App werden mit Webtechnologien erstellt. Vereinfacht ausgedrückt, wird bei einer Cordova App ein WebView in eine native App eingepackt. Innerhalb des WebViews wird eine Web App ausgeführt. Der Zugriff auf betriebssystem-spezifische Funktionen geschieht mit Hilfe von Plugins, welche eine Brücke zwischen JavaScript und nativem Code erlauben. Plugins existieren für verschiedenste Szenarien, wo Problemstellungen nicht mit Web Technologien abgedeckt werden können. Ein Entwickler kann ein Plugin ohne Kenntnisse von nativem Code nutzen. Es gibt aber auch Einschränkungen, welche es zu erwähnen gilt: nativer Code ist flüssiger und einige native Konzepte können nicht in einem WebView umgesetzt werden. Eine erfolgreiche App hängt auch von der Qualität des verwendeten Benutzerschnittstellen-Frameworks ab. Dieses muss die nativen Komponenten mit Webtechnologien so ähnlich wie möglich nachbilden - hier gibt es meiner Meinung nach noch Spielraum für Verbesserungen. Aber trotzdem ist es bereits heute möglich, Cordova Apps zu entwickeln, welche der “normale” Benutzer nicht von nativ programmierten Apps unterscheiden kann. Eine gut konzipierte Cordova App kann mit wenig Änderungen auch als Web App für den Browser verwendet werden.

React Native/NativeScript

React Native von Facebook erregt zur Zeit grosse Aufmerksamkeit - ein ähnliches Produkt ist NativeScript von Telerik. Die beiden Produkte sind noch nicht wirklich fertig, aber ihr Ansatz ist vielversprechend. Aus diesem Grund müssen diese Werkzeuge in diesem Blog Erwähnung finden. React Native und NativeScript verwenden beide die JavaScript Laufzeitumgebung des Betriebssystems um Web Code in native APIs umzuwandeln. Der grosse Produktivitätsgewinn kommt dann, wenn sogenannte React-Komponenten verwendet werden. Zur Zeit gibt es nur wenige dieser Komponenten aber es scheint, dass die Anzahl schnell steigen wird. React Native will Webentwickler (aber nicht nur) ansprechen, die mit ihrem Know How effizient Apps mit nativen APIs entwickeln möchten. React Native verfolgt zur Zeit einen “einmal lernen - überall entwickeln” Ansatz. In Zukunft ist aber eine zusätzliche Schicht denkbar, die einen “einmal entwickeln - überall ausführen” Ansatz erlaubt. NativeScript geht mit ihren NativeScript Plugins bereits heute in diese Richtung. Sollen auch Web Apps für den Browser entwickelt werden, können dasselbe Know How und vielleicht auch Komponenten verwendet werden.

Schlussfolgerungen

Wenn es schlussendlich darum geht, sich für eine Entwicklungsstrategie zu entscheiden, spielen wie immer auch zahlreiche externe Faktoren wie Budget, Mitarbeiter, existierende Apps und IT Organisation eine zentrale Rolle.

Aus der Sicht der Qualität führt die Verwendung der nativen APIs zu einem besseren Resultat.

Für sensible Unternehmen macht es auch heute noch Sinn, die nativen Werkzeuge zu verwenden.

Xamarin ist vor allem dort interessant, wo bereits heute viel C# und .NET Knowhow vorhanden ist und wo auf eine Programmiersprache standardisiert werden soll. Wenn sich Xamarin Forms weiterentwickelt, können qualitativ hochstehende Apps mit hoher Produktivität entwickelt werden. Synergien zu Web Apps bestehen keine.

Eine Kombination aus nativem Code und Web Code (Hybrid Apps) ist sehr interessant, da qualitativ hochstehende Apps entwickelt werden können und grosse Synergien zu der Entwicklung von Web Apps bestehen. Nachteilig ist, dass nach wie vor die nativen Werkzeuge bis zu einem gewissen Grad beherrscht werden müssen. Die Produktivität im Vergleich zu einer Cordova App ist deutlich schlechter.

Von Seiten der Produktivität betrachtet, ist Cordova im Moment unschlagbar. Wenn zusätzlich noch der Browser mit Web Apps unterstützt werden soll, nimmt die Produktivität weiter zu. Speziell für Unternehmensanwendungen ist dies ein sehr starkes Argument!