Kotlin Multiplatform Mobile

Przyjrzyjmy się bliżej Kotlin Multiplatform Mobile ⬇️

Zastrzeżenie: Tekst powstał jesienią 2021, a KMM rozwija się dynamicznie.


❓ Problem

Wybór technologii do zbudowania aplikacji mobilnej działającej jednocześnie na iOS i Android zawsze wiąże się z kompromisem.

kmm

Rozwiązania natywne (Swift/Kotlin):

  • dają największe możliwości i najlepsze user experience
  • wymagają pracy dwóch oddzielnych zespołów i utrzymania dwóch oddzielnych projektów
  • są droższe

Rozwiązania cross-platformowe (React Native/Flutter):

  • polegają na tworzeniu aplikacji ze współdzielonego kodu
  • nakładają ograniczenia techniczne
  • są tańsze

💡 Rozwiązanie

Kotlin Multplatform Mobile

kmm

  • cross-platformowe SDK
  • wykorzystuje interoperacyjność języków programowania używanych dla obu platform
  • logika biznesowa jest wydzielona do jednego współdzielonego modułu
  • interfejs użytkownika i korzystanie z API specyficznych dla poszczególnych platform jest budowane natywnie

🕵️‍♀️ Kto za tym stoi?

JetBrains - firma od Kotlina, AppCode czy PyCharm’a


👶 Dojrzałość

Jest to świeża technologia.

  • pierwszy release pod koniec 2017 (Kotlin 1.2)
  • w 2020 przyznany status alpha (na własne ryzyko, możliwe błędy przy migracji)

🛠 Bebechy

  • KMM wykorzystuje interoperacyjność Kotlina z Objective-C oraz Objective-C ze Swiftem
  • logika biznesowa jest napisana w jednym module, a potem kompilowana do biblioteki androidowej oraz frameworka iOSowego (używając Kotlin/Native)
  • dla iOS możliwa integracja przez CocoaPods i SPM
  • plugin KMM (Android Studio, AppCode) do tworzenia współdzielonego kodu z logiką biznesową

☁️ Możliwości

  • szybszy development
  • brak duplikacji kodu
  • natywna wydajność aplikacji
  • testy pisane tylko raz
  • dzielenie sie wiedzą między programistami iOS i Android

🏔 Ryzyka

  • stabilność rozwiązania jest oznaczona jako alpha (używaj na własne ryzyko)
  • należy spodziewać się problemów z migracją (języka, IDE, pluginów)
  • konieczność wdrożenia się przez developerów iOS w rozwiązania androidowe (Kotlin, Gradle, Android Studio)
  • potencjalne problemy na iOS

📚 Case studies

📺 Netflix

  • w KMM powstało lekkie mobilne sdk ze sporą logiką biznesową kompletnie niezależną od platformy

🔨 Leroy Merlin

  • konieczność przepisania i uwspólnienia legacy z logiką biznesową
  • odrzucono Flutter i ReactNative jako niewystarczające
  • natywna wydajność aplikacji
  • szybszy development
  • dłuższe testowanie przez QA

📖 Quizlet

  • globalna platforma e-learningowa
  • przeniesiono współdzieloną logikę biznesową w JavaScript do KMM
  • przejście na KMM mocno poprawiło wydajność aplikacji moblinych

👩🏻‍💻 Fastwork

  • platforma dla freelancerów we wschodniej Azji
  • wprowadzenie KMM zwiększyło produktywność

☁️ Yandex.Disk

  • aplikacje mobilne umożliwiające trzymanie zdjęć w chmurze
  • praca z KMM zaczęła się od eksperymentu z małym ficzerem
  • finalnie zaimplementowano całą logikę synchronizacji danych

🇨🇿 Cleverlance

  • czeski dostawca IT
  • użycie KMM przyniosło niespodziewane korzyści
  • przykład: użycie nowego kodu w KMM na drugiej platformie było “naturalnym code review” co przyspieszyło proces developmentu

😠 Hejterzy

“KMM nie nadaje się na produkcję” - jest szereg poważnych firm, które używają KMM na produkcji.


🔗 Linki


📝 Wnioski

  • KMM wydaje się obiecującym rozwiązaniem, szczególnie w przyszłości
  • trzeba rozważyć czy korzyść z uwspólnienia kodu logiki biznesowej przewyższy koszt potencjalnych problemów z migracją do nowszych wersji

PS. W każdy poniedziałek przesyłam porcję praktycznej wiedzy o tworzeniu aplikacji mobilnych. Dołączyć można na samym dole strony. ⬇️