In diesem Artikel wollen wir die Möglichkeiten der App-Entwicklung etwas sortieren und diese gemäß den App-Arten (nativ, web, hybrid) zuordnen. Beginnen wir mit der nativen App-Entwicklung für iOS. Diese findet bekanntermaßen in der Entwicklungsumgebung Xcode mit der Programmiersprache Swift unter macOS statt. Das User Interface wurde sehr lange Zeit im Interface Builder mit von Storyboards erstellt. Nunmehr wird auch ein deklaratorischer Ansatz verwendet. Über SwiftUI erfolgt die Definition im Quellcode. Die Vorgehensweise ist mit der Arbeitsweise auf anderen Systemen vergleichbar. Statt einem XML-Code bleibt man jedoch auch bei der User Interface-Definition bei Swift. Der Einsatz von SwiftUI vereinfacht im Übrigen die Entwicklung von Apps für das gesamte Ökosystem aus dem Hause Apple. Auf diese Weise kann man die grafische Benutzerschnittstelle generisch für die unterschiedlichsten Devices erstellen, zum Beispiel für einen Mac-PC und den Quellcode ohne größere Anpassungen auf andere Geräte, beispielsweise ein iPad oder ein iPhone wiederverwenden. Die Anpassungen an das Zielsystem werden vom System automatisch erledigt. Zusammenfassend kann man sagen, dass SwiftUI das Erstellen der Oberflächen vereinfacht. Die Entwicklergemeinde begrüßt daher dieses Feature.

Kommen wir zur Entwicklung von nativen Apps für Android. Das System aus dem Hause Google gibt sich hier in Bezug auf die Entwicklung deutlich flexibler. Die integrierte Entwicklungsumgebung Android Studio kann unter Windows, macOS oder Linux ausgeführt werden. Ebenso stehen für alle Systeme Emulatoren zum Testen der App währenden der Entwicklung zur Verfügung. Für die Programmierung kann man alternativ die Sprachen Java oder Kotlin einsetzen. Google empfiehlt inzwischen den Einsatz der moderneren Sprache Kotlin. Entwickler, welche mit dieser Sprache bisher nicht Berührung gekommen sind, finden unter online eine einführende Dokumentation. Auch bezüglich der IDE kann man Alternativen einsetzen, zum Beispiel die IntelliJ IDEA von JetBrains. Das User Interface wird mit Hilfe eines XML-Dialektes deklariert. Zur Unterstützung bieten die IDEs Interface Builder.

Und nun kommen wir zu alternativen Ansätzen der App-Entwicklung. Diese lassen sich nicht immer ganz genau den o.g. Raster nach den App-Arten zuordnen, dennoch werden wir hier eine Systematisierung versuchen: Beginnen wir mit dem Einsatz von Web-Technologien. Um eine Web-Applikation für die mobilen Systeme zu erstellen, steht Ihnen die gesamte Bandbreite der Web-Technologien zur Auswahl. Insbesondere die gängigen Bibliotheken und Frameworks können verwendet werden. Ein Web-Applikation läuft komplett auf dem Server und ist für den Fall der Ausführung auf einem Smartphone/ Tablet insbesondere hinsichtlich der Darstellung des User Interface angepasst. Viele moderne User Interface-Bibliotheken sind unmittelbar auf eine responsive Darstellung ausgerichtet, d.h. sie passen diese direkt an die Größe und Platzverhältnisse des Zielgerätes an. Ein typisches Beispiel ist die häufig und gern eingesetzte UI-Bibliothek Bootstrap (https://getbootstrap.com/). Diese bietet Layout-Container und Controls, u.a. eine Navigation, welche sich automatisch an die Bildschirmgröße des Endgerätes anpasst. Web-Technologien basieren final immer auf den Elementen HTML (Struktur), CSS (Design) und JavaScript (Interaktion, Logik). Andere Technologien, zum Beispiel TypeScript statt JavaScript können wir natürlich ersetzend bzw. zusätzlich anwenden, letztendlich wird die App jedoch durch den Browser auf dem Smartphone ausgeführt und dieser verarbeitet nun einmal lediglich diese Sprachen. Weitere Frameworks, um Web Applikationen für (primär) mobile Devices zu erstellen sind u.a. Framework7 [1], Ionic Framework [2], Onsen UI [3], Tizen [4]. Die Liste lässt sich noch eine ganze Weile fortsetzen, ohne dabei den Anspruch zu haben, vollständig zu sein. Hier kommt es u.a. auch darauf an, mit welchen weiteren Tools und Frameworks man die App bauen möchte. Die UI-Frameworks können hier weitgehend miteinander kombiniert werden, so dass dem Entwickler eine maximale Entscheidungsfreiheit, aber auch die Qual der Wahl hat.

Kommen wir jetzt zu den hybriden Technologien. Hier ist der Entwickler bei der Auswahl auch nicht auf ein System festgelegt, sondern hat die Auswahl. Für die Entwicklung stehen mehrere Frameworks zur Verfügung, zum Beispiel Cordova der Apache Software Foundation oder Appcelerator Titanium Mobile. Das Prinzip ist stets ähnlich. Die App öffnet beim Starten ein Browserfenster im Vollbildmodus, so dass der Browser als solcher nicht identifizierbar ist. Die Web-Adresse kann nicht geändert werden. In dieser WebView wird die mit HTML, CSS und JavaScript erstellte Web App angezeigt. Die Web App kann weitere Bibliotheken und Frameworks einsetzen, beispielsweise für eine vereinfachte Gestaltung des User Interface. Wir haben hier die Auswahl an Werkzeugen, wie bei einer Web Applikation. Über das Framework, zum Beispiel Cordova, bekommt die App Zugriff auf die Systemfunktionen, wie die Kamera oder das Adressbuch. Das geschieht mit Hilfe von Plug-Ins. Das hybride App Framework bietet damit den Rahmen für die App und simuliert für das Betriebssystem die Funktionsweise einer nativen App.

Architektur einer hybriden App am Beispiel von Apache Cordova.
Abbildung 1: Architektur einer hybriden App am Beispiel von Apache Cordova [5]

Sehen wir uns das etwas genauer an: Links oben haben wir den Kasten Web App. Dieser stellt die eigentliche Applikation in Form einer interaktiven Webseite, d.h. einer Web Applikation, dar. Satt in einem externen Browser läuft diese App nun aber in der Web View, d.h. dem von Cordova bereitgestellten internen Browser. Genutzt werden herkömmliche HTML APIs und spezifische API von Cordova. Für Systemzugriffe (Sensoren, Dienste, Daten usw.) werden eigens von Cordova angebotene Plugins verwendet (rechter Kasten, oben). Die Verfügbarkeit und Leistungsfähigkeit dieser Plugin bestimmt also den möglichen Funktionsumfang einer hybriden App. Ebenso kapseln die Plugins die Unterschiede in den Zielsystemen (Android und iOS). In der Folge nutzt der Entwickler nur die generische Cordova API und das System sorgt für die korrekte Umsetzung auf das Zielsystem. Das Mobile Betriebssystem stellt auch hier die Funktionen über APIs bereit (blauer Kasten unten).
Nach den nativen, webbasierten und hybriden Apps kommen wir nun zu Cross Plattform-Vorgehen. Es gibt inzwischen eine große Anzahl von Cross Plattform Ansätzen, welche sehr unterschiedlich in der Herangehensweise sind. In Tabelle 1 sind aktuell verfügbare Methoden mit wichtigen Eigenschaften zusammengetragen.

Plattformübergreifende Ansätze zur App-Programmierung für Android und iOS.

Ein „ideales“ Vorgehen gibt es nicht. Jeder dieser Ansätze bietet Vor- und Nachteile. Dabei können wir feststellen, dass eine Reihe von Ansätzen auf den Werkzeugen, Programmiersprachen, Ressourcen, d.h. Bibliotheken und Frameworks, aus der Web-Entwicklung basieren. Dazu zählen zum Beispiel NativeScript und React Native. Andere Ansätze, zum Beispiel Xamarin sind eher an die Vorgehensweise der Entwicklung von klassischen Desktop Applikationen angelehnt. Hier hat der Entwickler die Wahl.

Literatur und Links

[1] https://framework7.io/
[2] https://ionicframework.com/
[3] https://onsen.io/
[4] https://developer.tizen.org
[5] https://cordova.apache.org/docs/en/latest/guide/overview/