Native App-Entwicklung ist aus technologischer Sicht nach wie vor der Goldstandard, zum Beispiel wenn es um Performance, die neusten Platform-APIs oder um den Zugriff auf native Hardware-Elemente (Kamera, Sensoren etc.) geht. Aber auch ein Cross-Platform-Ansatz, bei dem mit einer einzigen Codebasis Apps für mehrere Plattformen erstellt werden, kann Vorteile bieten, zum Beispiel die Einsparung von Kosten und/oder organisatorischem Aufwand sowie eine schnellere Entwicklungszeit. Es gibt verschiedene Tools, die die Cross-Platform-Entwicklung unterstützen, darunter Kotlin Multiplatform, Flutter und React Native. Die erhofften Vorteile durch Cross-Platform-Entwicklung kommen aus meiner Sicht als Android Developer besonders mit KMP zum Tragen, denn ich muss mir im Gegensatz zu Flutter oder React Native kein neues Framework aneignen, sondern kann auf meiner Kotlin-Expertise aufbauen.
Kotlin Multiplatform (KMP) ist eine der neuesten Technologien im Bereich der Cross-Platform-Entwicklung und wurde von JetBrains entwickelt. Mit KMP können Apps für Android, iOS, Desktop (Windows, Linus, MacOS) und Web (obwohl manche Platforms noch in Alpha- oder Betastages sind) entwickelt werden. Nach dem neuesten Release haben wir uns intensiv mit dieser Technologie auseinandergesetzt und möchten hier unsere Erkenntnisse teilen.
Trotz syntaktischer Ähnlichkeiten von Swift und Kotlin: KMP ist vor allem für Android Developer ein Heimspiel - oder? Dieser und anderen Fragen gehen iOS Developer Konstantin und Android Developer Dimitri in Folge vier unseres Podcasts Continuous Inspiration nach.
Ob ein Projekt besser nativ oder cross-platform entwickelt wird, hängt von verschiedenen Faktoren ab. Wir haben uns angeschaut, für welche Projekte Kotlin Multiplatform das passende Framework ist und einige wichtige Schritte identifiziert, die für die Evaluierung und Umsetzung entscheidend sind:
Zunächst sollten folgende Fragen beantwortet werden:
Abhängig von den Projektzielen und den gegebenen Umständen kann es sein, dass Cross-Platform-Entwicklung nicht geeignet ist oder dass ein anderes Tooling bevorzugt werden sollte. KMP ist insbesondere dann besonders interessant, wenn ohnehin schon eine Android App und Kotlin Know How vorhanden sind, oder wenn man einen nativen Projekt ohne Entwicklungsstopp in die Cross-Platform umwandeln möchte. Auch wenn man aus Businessgründen eine eher ungewöhnliche Plattform-Kombination hat (wie z. B. Android und Desktop) kann man mit Kotlin Multiplatform relativ problemlos mit dieser Situation umgehen. Auch für Fälle, in denen man grundsätzlich native Entwicklung bevorzugt, aber beispielsweise eine komplexe Fachlogik hat, die im Client implementiert werden muss, ist KMP ein sehr gutes Tool, weil man genau diesen komplexen Teil zwischen den Plattformen sharen kann.
Bei einem Projekt mit einer bereits vorhandenen App sollten folgende Aspekte berücksichtigt werden:
Wenn z. B. die nativen Apps ähnlichen Architektur-Patterns folgen, wird die Migration logischerweise einfacher. Hat man dagegen eine Legacy Codebase, die nicht gut modularisiert ist, dann wird man vor der Umstellung auf KMP mehr Refactoring durchführen müssen.
In diesem Schritt sollten folgende Fragen geklärt werden:
Kotlin Multiplatform schreibt keine Architektur vor, wenn man aber Multiplatform Code mit dem nativen Code kombinieren möchte, braucht man in der Regel eine modulare, entkoppelte Architektur. Wenn man die komplette Codebase sharen möchte, sind nur die Kotlin-Entwickler*innen notwendig, möchte man dagegen Teile der App nativ gestalten, muss die Teamzusammensetzung anders geplant werden.
Inzwischen gibt es zahlreiche nützliche Bibliotheken für Kotlin Multiplatform, die problemlos eingesetzt werden können. Einige davon sind bereits als etablierte Lösungen für bestimmte Entwicklungsprobleme anerkannt, z. B. Koin für Dependency Injection oder Ktor für die Server-Kommunikation. Hier kann man sich über weitere Libraries informieren.
Für bestimmte Problemstellungen kann der Einsatz von Cross-Platform-Entwicklung sehr vorteilhaft sein. Dabei bietet KMP gegenüber der anderen Cross-Platform-Tools erhebliche Vorteile, insbesondere wenn bestehende native Apps in eine Multiplatform-Anwendung umgewandelt werden sollen, bereits eine Kotlin-Codebasis und Kotlin-Entwickler*innen vorhanden sind oder wenn viele Plattform-APIs genutzt und mit nativem Code kombiniert werden müssen. Da Kotlin Multiplatform aktuell noch ein neues Tool für die Cross-Platfom-Entwicklung ist, wird das wahrscheinlich mit der Zeit mehr Relevanz bekommen und sowohl rein nativer Entwicklung, als auch anderen Cross-Platform-Tools Konkurrenz machen.