Entwicklungsaufwand einsparen durch gemeinsame Codebasis für iOS und Android – und trotzdem nativ

Kotlin Multiplatform Mobile
In der heutigen Zeit gibt es viele Ansätze wie Xamarin, Flutter oder React Native, um Cross-Plattform Apps zu entwickeln. Inwieweit unterscheidet sich hier das Kotlin Multiplatform Mobile (KMM) von anderen Frameworks?

Die meisten dieser Ansätze nutzen eine virtuelle Umgebung, in der die Anwendung läuft. Dies führt dazu, dass das Design, Verhalten oder Anbindung von nativen Bibliotheken der App oftmals nicht einer nativ umgesetzten App entspricht, sondern einen Kompromiss der unterschiedlichen Plattformen darstellt.

KMM geht einen anderen Weg und konzentriert sich darauf, die Geschäftslogik vom Rest der App zu trennen und nur diese Logik zwischen den Plattformen zu teilen.

Die Architektur wird somit durch zwei Schichten vorgegeben. Zum einen ist dies die Geschäftslogik, welche jegliche Logik beinhalten sollte, die zwischen den Plattformen gleich ist, und das Datenmodell der App darstellt. Weiterhin wird eine View-Schicht definiert, welche das Grundgerüst sowie die Ansichten der App beinhaltet. Diese ist plattformabhängig und wird daher auch pro Plattform unterschiedlich umgesetzt, wodurch ein natives „Look and Feel“ erreicht werden kann. Aus dieser Schicht wird dann auf die Geschäftslogik zugegriffen und der gemeinsame Code verwendet. Eine starke Separierung zwischen UI und Geschäftslogik wird durch KMM somit noch verstärkt, was eine sauberere Architektur ermöglicht. 

Auch wenn die Geschäftslogik eine gekapselte Einheit bilden sollte, um sie sauber von Abhängigkeiten und der UI zu trennen, kann sie auf iOS und Android spezifische APIs durch das expect/actual pattern zugreifen und damit nahtlos mit plattformspezifischem Code interagieren. So kann z.B. auf Android die Play Services oder CameraX angebunden werden und auf iOS im Gegenzug CloudKit oder AVFoundation.

Zusammen mit KMM gibt es bereits einige Bibliotheken, die solche generellen Probleme wie HTTP-Aufrufe durch Ktor, SQLite Datenbanken durch SQLDelight angehen, sodass diese in der Geschäftslogik direkt genutzt werden können.

Sollte bereits eine native Android-App existieren, kann in diese auch KMM eingebracht werden. Dazu muss der Code, welcher cross-plattform genutzt werden soll, abgekapselt werden und kann dann aus einem normalen Modul in ein gemeinsames Kotlin Modul verschoben und somit auch unter iOS genutzt werden. Dieser Vorgang kann beliebig skaliert werden, da kein Code zwingend migriert werden muss. Somit ist es für Weiterentwicklungen geeignet, ohne dabei den bestehenden Code zu verändern. 

Da der Code, welcher zwischen den Plattformen geteilt wird, in Kotlin geschrieben wird, kann er von Android-Entwickler:innen, ohne einen Paradigmenwechsel nötig zu machen, verfasst werden. Dies eliminiert auch eine zusätzliche Einarbeitung des Entwicklungsteams. Ebenso wird so nicht eine neue Sprache in die Codebasis eingeführt, sondern Kotlin kann als Sprache weiter genutzt werden. Durch ihre hohe Ähnlichkeit zu Swift ist eine Verwendung von iOS-Entwickler:innen zudem denkbar.

Kotlin Multiplatform Mobile bietet somit den Vorteil gegenüber anderen Crossplattform-Lösungen, dass nur die Logikschicht der App plattformunabhängig zur Verfügung gestellt wird. Der restliche Teil der App kann so sauber an die Plattform angebunden werden. Die Nachteile von plattformübergreifenden Lösungen, wie langsame Updates oder eine Inkompatibilität zu bereits vorhandenem Code, werden so ebenfalls eliminiert, da KMM entsprechende Unterstützung mitliefert. In KMM wird Multithreading über Coroutinen gelöst, was aktuell von Swift noch nicht unterstützt wird. Hierfür gibt es aber ebenso Lösungen, die dieses Problem umgehen können. Insgesamt stellt es einen guten Weg für eine Crossplattform-Lösung dar, ohne eine native User Experience der App zu zerstören.


Welcher Entwicklungsansatz ist für Ihr Projekt geeignet? Melden Sie sich bei uns! Wir beraten Sie gern individuell und unverbindlich: anfrage@zweidenker.de

Artikel teilen

Tags: Cross-platform, Flutter, Kotlin, mobile Apps