Unsere Reise mit Kotlin Multi­plat­form in der mobilen App-​Entwicklung

28.6.2024 - Andrin Weiler

Kotlin MultiplattformIn der sich ständig wandelnden Welt der App-​Entwicklung ist die Suche nach der opti­malen Tech­no­logie ein fort­lau­fender Prozess. Von den ersten Expe­ri­menten mit Cordova bis hin zur aktu­ellen Nutzung von Kotlin Multi­plat­form haben wir zahl­reiche Ansätze getestet und wert­volle Lektionen gelernt. Dieser Artikel bietet einen Einblick in unsere Reise, die Heraus­for­de­rungen, denen wir begegnet sind und die Lösungen, die wir gefunden haben, um unseren Entwick­lungs­pro­zess zu opti­mieren.

Die tägliche Heraus­for­de­rung

Seit dem Aufstieg von iPhones und Smart­phones beschäf­tige sich unser Team mit dem Entwi­ckeln von mobilen Appli­ka­tionen auf iOS und Android. Kunden erwarten heute Apps, die auf beiden Platt­formen laufen, um möglichst viele Nutzer anzu­spre­chen. Obwohl die native Entwick­lung für jede Platt­form die beste Benut­zer­er­fah­rung bietet, führt dies auch zu Inkon­sis­tenzen und verdop­pelt unsere Entwick­lungs­zeit. Wir brau­chen eine Lösung, um unseren Prozess zu straffen und gleich­zeitig die Konsis­tenz über alle Platt­formen hinweg zu gewähr­leisten.

Die Suche nach Effi­zienz

Unser Ziel war es, effi­zi­enter zu entwi­ckeln. Um das zu errei­chen, machten wir uns auf den Weg und erprobten diverse Tech­no­lo­gien, welche jeweils unter­schied­liche Ansätze anboten.

Der erste Versuch: Cordova

Die ersten Schritte auf unserem Weg führte uns zu Cordova. Diese Tech­no­logie erlaubte uns Webap­pli­ka­tionen zu schreiben und diese dann in einer nativen Plat­form einzu­betten. Für den Zugriff auf betriebs­sys­tem­spe­zi­fi­sche Funk­tionen wie die Kamera bot Cordova einfache Schnitt­stellen an. Trotz seiner Vorteile fühlte sich Cordova oft träge an, und es war schwierig, flüs­sige Anima­tionen zu imple­men­tieren. Zudem stießen wir gele­gent­lich auf Probleme mit Plugins von Dritt­an­bie­tern, die nicht immer zuver­lässig waren. Dennoch blieb es ein prak­ti­ka­bles platt­form­über­grei­fendes Frame­work mit relativ wenigen Nach­teilen.

Vorteile

  • Einma­liges schreiben von Code als Webap­pli­ka­tion

  • Starke Schnitt­stelle für Native Features

Nach­teile

  • Anima­tionen sind nicht flüssig

  • Zwei­fel­hafte Plugins

Der zweite Schritt: Xamarin

Als nächstes wagten wir uns an Xamarin. Angetan vom Verspre­chen, nur eine Code­base für alle Platt­formen schreiben zu müssen. Wir setzten Xamarin für die erste Version unserer Tele­text App ein. Aller­dings machten Leis­tungs­pro­bleme von Xamarin, insbe­son­dere bei großen Listen, sowie platt­form­spe­zi­fi­sche Fehler, wie Abstürze bei Netz­werk­ab­fragen, die Nutzung weniger geeignet. Die Xamarin-​Implementation von neuen Plat­form­fea­tures brauchte stets seine Zeit und seit dem 1. Mai 2024 wird Xamarin nicht mehr von Micro­soft unter­stützt oder aktua­li­siert.

Vorteile

  • Einma­liges schreiben von Code

  • Einbin­dung von Micro­softs .NET und C#

Nach­teile

  • Leis­tungs­pro­bleme

  • Insta­bi­lität

  • Xamarin Support

Expe­ri­mente mit Alter­na­tiven

Unsere Reise setzte sich fort mit Expe­ri­menten diverser Tech­no­lo­gien. Dazu gehörten Flutter, React Native, und viele mehr. Obwohl diese Alter­na­tiven viel­ver­spre­chend waren, erfüllten sie unsere Anfor­de­rungen nicht voll­ständig. In manchen Fällen verwen­deten wir sogar ein platt­form­über­grei­fendes C-​basiertes Frame­work und über­mit­telten protobuf-​serielle Binär­daten als Funk­ti­ons­ar­gu­mente. Jede Tech­no­logie bot wert­volle Einblicke, konnte letzt­end­lich jedoch nicht unsere ideale Lösung bieten.

Die Balance: Kotlin Multi­plat­form

Das lange Aben­teuer nähert sich der Gegen­wart. Unsere Suche führte uns letzt­end­lich zu Kotlin Multi­plat­form. Diese Tech­no­logie ermög­licht es uns, eine einheit­liche Redux-​Ähnliche Daten­struktur für iOS und Android zu entwi­ckeln, während wir platt­form­spe­zi­fi­sche UIs und Logik imple­men­tieren können. Durch die Nutzung von KMP konnten wir Entwick­lungs­auf­wände redu­zieren und gleich­zeitig die Stärken der nativen Entwick­lung für eine opti­male Benut­zer­er­fah­rung bewahren. Für uns bisher eine gute Lösung.Unsere Redux Biblio­thek sowie eine detail­lierte Anlei­tung haben wir auf GitHub veröf­fent­licht, um unsere Erfah­rungen zu teilen und anderen Entwick­lern die Möglich­keit zu geben, davon zu profi­tieren.

Gitlab smoca

Vorteile

  • Einfache Entwick­lung für Android

  • KMP Code muss einmalig geschrieben werden

Nach­teile

  • iOS wird schlechter unter­stützt

  • Vergli­chen mit anderen Cross-​Platform schreibt man mehr Code

Grafik zu Implementation der Datenstruktur mit KMPGrafik zu Imple­men­ta­tion der Daten­struktur mit KMP (von Michael Burg­dorfer)

Die Reise geht weiter

Auch in Zukunft sind wir weiterhin bestrebt die beste Tech­no­logie für spezi­fi­sche Probleme einzu­setzen. Unsere momen­tane Lösung hat seine Stärken, jedoch ist uns sehr wohl bewusst, dass bestimmte Kunden, spezi­fi­sche Lösungen brau­chen und man nicht um eine native Entwick­lung herum­kommt. Eines steht fest, wählen wir für jede Heraus­for­de­rung die am besten geeig­nete Tech­no­logie und unsere Reise besteht aus stän­diger Anpas­sung und Verbes­se­rung.

Haup­bild und Grafiken: Michael Burg­dorfer, Adobe Firefly

Kontakt

Smoca AG
Tech­no­park­strasse 2
Gebäude A, 3. Stock
8406 Winter­thur

Letzter Blog­ein­trag

Unsere Reise mit Kotlin Multi­plat­form in der mobilen App-​EntwicklungAndrin Weiler - 28.6.2024

In der sich ständig wandelnden Welt der App-​Entwicklung ist die Suche nach der opti­malen Tech­no­logie ein fort­lau­fender Prozess. Von den ersten Expe­ri­menten mit Cordova bis hin zur aktu­ellen Nutzung von Kotlin Multi­plat­form haben wir zahl­reiche Ansätze getestet mehr ...

  • Smoca Facebook
  • Smoca Twitter
  • Smoca LinkedIn
  • Smoca RSS Feed