Mobile Technology Approaches

Ein aktueller Überblick über die verschiedenen Technologien zur Realisierung mobiler Anwendungen.

vonMartin KuckertinTechnology

Continuum of Mobile Application Development Technologies

Anwendungsentwicklung für die mobilen Plattformen iOS und Android erfordert spezifisches Wissen über diese beiden Systeme. Die Hersteller:innen stellen jeweils eigene, zueinander aber inkompatible Toolchains bereit. Während die Entwicklung unter Android z.B. mit Java oder Kotlin erfolgt, wird unter iOS Objective-C oder Swift eingesetzt. Die Entwicklung von zwei grundsätzlich unabhängigen Apps ist aber nicht immer sinnvoll, da Code-Pakete nicht wiederverwendet werden können und zwei separate Implementierungen nötig sind. Der Aufwand ist bei komplexer Business-Logik und speziellen Protokollen aber nicht unerheblich und eine höhere Wiederverwendung von Code ist oft gewünscht. Ein Großteil der Business-Logik lässt sich nämlich plattform-unabhängig umsetzen.

Wir stellen mit dem Continuum of Mobile Application Development Technologies eine Übersicht der gängigen Technologien zur Umsetzung mobiler Anwendungen bereit. Diese macht sichtbar, welche unterschiedlichen Ansätze wir sehen und ordnet diese auf einer Achse an: Die nativen Technologien der Hersteller bedienen jeweils nur ihre eigene Plattform. Darauf folgend werden Cross-Platform-Ansätze mit steigendem Abstraktionsgrad aufgeführt. Schlussendlich werden hybride Technologien aufgeführt, die grundsätzlich auf allen Plattformen eingesetzt werden können, auch außerhalb von mobilen Betriebssystemen. Dieses Continuum kann die Basis für eine Entscheidung zur Umsetzung einer mobilen Anwendung sein

Bei nativer App-Entwicklung unter iOS unterscheiden wir zwischen der Arbeit mit dem in Xcode integrierten Interface Builder zum Erstellen von Storyboards und dem neuen Swift UI zur deklarativen Beschreibung von Oberflächen. Während der Interface Builder sich trotz komplizierter Auto Layouts seit Jahren bewährt, verfolgt Apple mit Swift UI auch neuere Ansätze und ermöglicht zum Beispiel eine direkte Vorschau auf mehreren Simulatoren gleichzeitig. Strategisch wird Apple vermutlich viel in Swift UI investieren, so dass neue, native Entwicklung durchaus auf den Interface Builder verzichten kann.

Für Android arbeitet Google mit Jetpack Compose ebenfalls an einem Ansatz, um Oberflächen deklarativ in Code zu beschreiben. Der Release ist für 2021 angekündigt. Es ist abzuwarten, ob die klassischen XML Layouts dadurch wirklich verdrängt werden.

Sofern die App nicht aus einfachsten Oberflächen besteht, ist eine Entwicklung separater Apps für die beiden Plattformen eher unnötig. Die Entwicklung zweier getrennter Apps erfordert entsprechend größere Kosten und erschwert die Wartung: Ein Bug in einer Protokoll-Umsetzung kann schlimmstenfalls auf beiden Plattformen getrennt vorhanden sein.

Bei Cross-Platform-Entwicklung wird eine Anwendungsarchitektur gewählt, die die Business-Logik und Infrastruktur von der Benutzeroberfläche trennt. Ganze Funktionsbereiche wie Persistenz, API-Zugriffe, Protokollimplementierungen und Business-Logik befinden sich in einem generischen Kern und müssen damit nicht mehrfach implementiert werden. Das Entwicklungsteam muss sich nicht in die Lager iOS und Android aufteilen, sondern kann auch gezielt von fachlichen Experten unterstützt werden, um den generischen Teil zu entwickeln.

Für diesen Ansatz kann der Klassiker C++ mit der nativen Anwendungsentwicklung kombiniert werden. Die native Library wird statisch oder dynamisch mit der App gelinkt und stellt die Business-Logik bereit.

Xamarin wird von slashwhy häufig eingesetzt, um Anwendungen mit unseren Kunden:innen aus der Industrie zu entwickeln. Bei diesem Ansatz wird die gesamte App mit C# umgesetzt, der Entwickler hat vollen Zugriff auf den .NET Standard. Die Technologie bindet die nativen APIs von iOS und Android an, so dass die Trennung in plattformspezifischen und generischen Code sehr gut erfolgen kann. Über Abstraktion und Architektur wird so zum Beispiel möglich, den Bluetooth Low Energy Stack der beiden Betriebssysteme aus einer generischen Codebasis heraus zu bedienen, um zum Beispiel CAN, J1939 oder proprietäre Protokolle umzusetzen.

Weitere Alternativen für Cross-Platform-Entwicklung sind der "Neuling" Flutter oder React Native.

Bei der Entwicklung hybrider Apps wird die App letztendlich nicht mehr spezifisch für einzelne Plattformen angepasst sondern implementiert eine generische Benutzeroberfläche. Abweichungen müssen gesondert umgesetzt werden. Eine hybride App besteht aus einer Web-Anwendung, die zum Beispiel mit TypeScript umgesetzt ist und von einem Framework wie Cordova in einer nativen App gekapselt wird. Über sogenannte Plugins werden native Funktionen den Web-Komponenten zur Verfügung gestellt. Hybride Apps lassen sich fast vollständig in einem Webbrowser wie dem Google Chrome umsetzen und erfordern nicht immer, dass die Entwickler:innen Wissen von den mobilen Plattformen haben müssen. Dabei besteht allerdings ein wenig die Gefahr, den mobilen Kontext aus den Augen zu verlieren. Zudem sieht der:die versierte Nutzer:in einer App oftmals an, dass sie nicht nativ umgesetzt ist. Vor allem unter Android gab es in der Vergangenheit immer Einbußen in der Performance.

tl;dr

Grundsätzlich gibt es nur wenige Gründe, eine App nicht Cross Platform umzusetzen. Ohne tiefergehende Einschätzung der individuellen Anforderungen kann Xamarin mit nativen Layoutsoder Flutter eine gute Empfehlung sein, wohingegen von nativer Entwicklung oder hybriden Ansätzen abzuraten wäre.

Xamarin ermöglicht den Zugriff auf die große .NET Welt und gleichzeitig die Anbindung der UI Frameworks von iOS und Android. Damit werden native UIs erstellt, während sich die Business Logik in .NET Standard Bibliotheken zwischen den Plattformen geteilt wird. Potentiell sind diese Bibliotheken auch in anderen .NET Core Projekten etwa im Server-, Desktop- oder Embedded-Bereich nutzbar. Die Code-Wiederverwendung beschränkt sich mit Xamarin somit nicht nur auf Mobile.

Mit Flutter wiederum lassen sich Apps sehr schnell umsetzen. Google hat die Toolchain so optimiert, dass viele Layout-Anpassungen direkt sichtbar gemacht werden können und der:die Entwickler:in so sehr schnell iterieren kann.

Spannend?

Vielleicht interessierst Du Dich auch für unsere Studie "Mobile App Development"? Mehr zum Thema Applikationsentwicklung bei slashwhy erfährst Du außerdem hier.

Gerne senden wir Dir weitere Infos rund um das Thema "Mobile App Development" und halten Dich auf dem Laufenden, wenn es etwas Neues in unserem Blog dazu gibt. Als Dankeschön erhältst Du außerdem unsere Infografik "Continuum of Mobile Application Development Technologies" als PDF. Hier geht es zur Registrierung:

Über den Autor

  • martin-kuckert-slashwhy

    Über Martin Kuckert

    Martin ist Chief Engineer am Standort Osnabrück. Als Entwickler für mobile Anwendungen hat viel Erfahrung in agilen Projekten zur Entwicklung individueller Softwarelösungen gesammelt. Durch sein Masterstudium in "Verteilte und Mobile Anwendungen" und seine mehrjährige Berufserfahrung bringt er ein breites Fachwissen mit. Martin legt viel Wert auf eine saubere Architektur, aufgeräumten Code und einen Blick für das Gesamtprodukt.