Kotlin Multiplatform Mobile: Yeni Bir Cross-Platform Çözümü Değil, Yeni Bir Yaklaşım



Merhaba, ben Boran Aslan, adesso Mobile ekibinin lideriyim ve bugün size cross-platform'a farklı bir bakış açısı getiren Kotlin Multiplatform Mobile'den bahsedeceğim, şimdiden keyifli okumalar.


Geçen yıl Ağustos ayında JetBrains, Kotlin Multiplatform Mobile’in alfa sürümünün hazır olduğunu duyurdu ve bu yeni SDK ile cross-platform’a farklı bir bakış açısı getirdi. Bu yazıda size, bu yeni bakış açısının mobil uygulama geliştirenler için neler sağladığından ve süreçlerimizi nasıl değiştirebileceğinden bahsedeceğim.


KMM’nin diğerlerinden niye ayrıldığını anlamak için öncelikle popüler cross-platform çözümlerinin nasıl çalıştığını ve bize neler sağladığını bilmemiz gerekiyor. Amacım bütün cross-platfom çözümlerini kıyaslamak olmadığı için en popüler olan iki tanesi React-Native ve Flutter ile listeyi sınırlı tutacağım.

React-Native

React Native combines the best parts of native development with React, a best-in-class JavaScript library for building user interfaces.

React-Native; Facebook’un desteklediği iOS, Android, MacOS gibi farklı platformlar için tek bir kod havuzu ile yaratıcı arayüzler tasarlamanızı sağlayan bir framework. Temel olarak yaptığı şey JavaScript ile geliştirdiğiniz kodu platform spesifik arayüzlere dönüştürmek ve bu sayede tek bir kod ile hem iOS hem de Android ortamında uygulamalar geliştirmenizi sağlamak. Kalabalık bir kullanıcı kitlesi olmasını ve uygulama geliştirirken yaptığınız değişiklikleri anında görmenizi sağlayan yapısını avantajları arasında sayabiliriz. Bir diğer olumlu yanı da Facebook ekibinin daha önce yaşanılan performans problemlerini çözmek için altyapıda sürekli iyileştirmeler yapması.


Bir de madalyonun diğer tarafına bakalım. React-Native işini ne kadar iyi yapıyor olursa olsun size sağlayacağı imkanlar kütüphanenin yetenekleri ile sınırlı. Native platformlarda geliştirilen yeni özellikleri kullanmak için hem iOS hem de Android tarafına uyarlanmasını ve stabil hale gelmesini beklemeniz gerekiyor. React-Native, native ile birlikte çalışabiliyor, çözemediğimizi de native tarafta çözeriz diye düşünüyorsanız Airbnb’nin React-Native’den neden vazgeçtiğini anlatan yazısını okumanızı öneririm. Özetlemem gerekirse, tek bir kod havuzunu yönetme hayali ile yola çıkıp üç kod havuzunu yönetmek zorunda kaldıkları için native’e dönme kararı alıyorlar. Son olarak, kütüphanelerin versiyon geçişlerinde yaşanan sıkıntılar, performans problemleri ya da hata ayıklarken bir miktar zorlanacağınız meşhur kırmızı hata ekranlarını da olumsuz yanları arasında sayabiliriz.


Bir de React-Native’i kullanan büyük firmalara göz atalım. Facebook, Instagram ve Uber Eats listede ilk göze çarpan isimler. Tabii sadece ekrandaki logolar hikayenin tamamını anlatmıyor, işin aslı bu uygulamaların sadece belirli bölümleri React-Native ile geliştiriliyor. Örnek vermek gerekirse Instagram’ın profil sayfası ve Facebook’un etkinlikler sayfası gibi. Kim bilir belki ileride altyapı çalışmalarını tamamladıklarında Facebook’u tamamen React-Native’e taşırlar.

Flutter

Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.

Flutter, Google’ın desteklediği ve Dart dili ile geliştirilen, farklı platformlar için güzel arayüzler geliştirmenizi sağlayan bir cross-platform çözümü. Flutter’ın React-Native’den ayrıldığı en belirgin nokta arayüz görüntüleme konusundaki yaklaşımı. Flutter arayüzü oluşturmak için Skia motorundan faydalanıyor. Bu hız ve akıcılık konusunda avantaj sağlarken, kullanılan sistem kaynakları konusunda da bir miktar dezavantaj. Bunun yanında Flutter için söylenebilecek en olumlu şeylerden biri de geliştiriciler arasında oldukça seviliyor olması. Sunduğu birçok hazır arayüz aracı ve belirli mikro animasyonları kolay uygulamanızı sağlaması kullanıcı deneyimine önem veren geliştiriciler için Flutter’ı öne çıkarıyor. Geliştiriciler için bir diğer avantaj da IDE seçimi konusundaki esnekliği, native Android geliştirme ortamına aşinaysanız Android Studio eklentisini, Microsoft dünyasına aşinaysanız VS Code eklentisini kurup hemen geliştirmeye başlayabilirsiniz. Son olarak Hot Reload özelliği ile React-Native gibi yaptığınız değişiklikleri hızlı bir şekilde görebilmenize imkan verdiğini ekleyeyim.


Hiç dezavantajı yok mu peki? Elbette her cross-platform çözümün doğası gereği belirli dezavantajları var. React-Native için de belirttiğim gibi iOS ve Android platformlarında yapılan değişikliklerin adaptasyonu konusunda Google’ı beklemek zorundasınız ve native tarafa hiç girmeyim derseniz yetenekleriniz Flutter’ın size sağladığı kadarı ile sınırlı kalmak durumunda. Bir diğer dezavantajı da kullanabileceğiniz sınırlı sayıda kütüphane olması. Bugün GitHub’da native için neredeyse örneğini ya da kütüphanesini bulamayacağınız hiçbir özellik yok ve bu geliştiricilerin işini bir hayli kolaylaştırıyor fakat Flutter henüz hem React-Native’e hem de native geliştirmeye göre çok genç olduğu için kütüphane ve örnek sayısı daha az. Bir diğer dikkat edilmesi gereken nokta da harita ya da Bluetooth gibi entegrasyonlarda karşınıza çıkabilecek teknik ya da performans problemleri.


Peki Flutter’ı hangi büyük şirketler kullanıyor? Google, eBay, Alibaba, Baidu, Groupon ve BMW resmi Flutter web sitesindeki örneklerde göze çarpan firmalar. Alibaba, Flutter’ı süreçlerine ilk adapte eden firmalardan bir tanesi ve 50 milyonun üstünde indirme sayısı olan Xianyu uygulamasının belirli kısımlarını Flutter ile geliştiriyorlar. Ürün detay sayfası en fazla görüntülenen ve Flutter ile geliştirilmiş sayfalardan bir tanesi. Henüz beta aşamasında kullanmaya başladıkları için native kısımlar ile iletişimde bir miktar sıkıntı yaşasalar da bunları aşmayı başarmışlar. İkinci örneği de BMW’den vereceğim. BMW Connected uygulaması; uzaktan aracınız ile iletişim kurmanızı sağlayan, servis randevularınızı yönetebileceğiniz, gideceğiniz yer için yol tarifi alabileceğiniz dünyadaki bütün BMW sürücüleri için geliştirilen bir uygulama. BMW yaklaşık 2 sene önce iki ayrı native platformun bakımının çok komplike hale geldiğini düşündüğü için uygulamaları Flutter ile tekrar yazma kararı aldı ve yeni iOS uygulaması bazı ülkelerde kullanılmaya başlandı bile. Apple ile yapılan dijital anahtar entegrasyonunun da bu uygulamada yapıldığı belirtmekte fayda var. Örnek için BMW uygulamasını seçmemdeki nedenlerden bir tanesi de ekip olarak native iOS versiyonu üstünde çalışmış olmamız ve uygulamanın ne kadar komplike olduğunu biliyor olmam. Bluetooth, Here Maps, Alexa, Apple Watch ve birçok entegrasyonu ve 30'un üstünde iç-dış kütüphane bağımlılığı olan bir projeyi Flutter’a taşıma kararını ilk duyduğumda çok cesur olduğunu düşünmüştüm ve hala da biraz cesur buluyorum ama BMW’nin kararından şu ana kadar memnun olduğunu söyleyebilirim. Airbnb örneğindeki gibi özellikler platform ve bölge bazlı farklılıklar gösterdiğinde çok fazla native tarafa müdahale etmek zorunda kalacaklar mı onu da zaman gösterecek.

Kotlin Multiplatform Mobile

Kotlin Multiplatform Mobile (KMM) is an SDK that allows you to use the same business logic code in both iOS and Android applications.

Ve gelelim bu yazının asıl konusu olan Kotlin Multiplatform Mobile’a. KMM daha tanıtım cümlesiyle diğerlerinden ayrılıyor. Diğer çözümlerden farklı olarak size yaratıcı ya da kolay geliştirilen bir arayüz değil, gerçekten iki farklı platformun kolayca paylaşabileceği katmanlar için bir çözüm sunuyor.



KMM içerideki 3 halka ile ilgili kodları paylaşmanıza olanak sağlıyor.

React-Native’in iOS, Flutter’ın Android’i varsayılan olarak kabul ettiğini ve diğer platformda native’e yakın bir deneyim yaşatmak için ekstra çaba sarf etmeniz gerektiğini düşündüğümüzde bu yaklaşımı oldukça mantıklı görünüyor. Native uygulama geliştirenler için başka bir avantajı da geliştirme ortamı. KMM, Android Studio üzerinde Kotlin ile geliştiriliyor. Yani Android uygulamaları geliştiren biri için evinin konforunda KMM kullanmaya devam edebilecek diyebiliriz. Mevcut uygulamalara kolay entegre olması, bağımlılık yönetimi için Cocoapods ve Gradle’ı desteklemesi, henüz alfa aşamasında olmasına rağmen benim gibi birçok kişi tarafından fikrinin çok beğenilmesi ve sonunda native uygulama geliştirenlerin işine yarayacak bir çözüm olması gibi ciddi avantajları söz konusu.



Belirttiğim gibi şu an hala alfa sürümünde olduğu için bu eleştirilerin bir kısmı için erken olabilir ama mevcut durumunu ortaya koyması açısından bilinmesinde fayda var. Öncelikle Kotlin için geliştirilmiş her kütüphaneyi kullanma şansınız yok, Kotlin Multiplatform için geliştirilmiş özel versiyonlarını kullanmanız gerekiyor. Bu özel versiyonların sayısının da şu an bir hayli az olduğunu söyleyebilirim. Sorun bu kadarla da sınırlı değil, bir de kullandığınız kütüphanelerin birbiri ile uyumlu versiyonlarını bulmanız gerekiyor ve ilk örnek uygulamamda en çok zamanımı alan kısım bu oldu. Tabii bu bahsettiğim zorluklar KMM ile geliştirdiğiniz kısım için geçerli, native tarafa istediğiniz kütüphaneyi ekleyip rahatlıkla kullanabilirsiniz. Doküman, entegrasyon, topluluk desteği gibi konularda yolun çok başında olduğunu da belirtmekte fayda var.


Peki bu oldukça yeni teknolojiye kimler hızlı adapte olmuş bir de ona bakalım. Netflix, Yandex ve Touchlab uygulamalarında KMM’ye şans veren şirketler ve tecrübelerinden memnun görünüyorlar. Daha detaylı bir örnek için Touchlab’in yayınladığı KaMP Kit güzel bir başlangıç noktası.

KMM Yazılım Sürecimizi Nasıl Değiştirebilir?

İşin en can alıcı noktası burası. KMM’nin en büyük avantajı mevcut uygulamanıza kolayca adapte olabilme potansiyeli ve farklı bir dil ya da ortam için öğrenme maliyetinin olmaması. Çok basit bir senaryo üzerinden gidelim, markette 2 milyon kullanıcısı olan bir uygulamanız var ve bu uygulamayı destekleyen native Android ve iOS yazılımcılarınız mevcut. Çoğu ürün şirketi için neredeyse geçerli bir senaryo diyebiliriz. Bu durumda Flutter ya da React-Native’i sürece dahil etmek için neler yapmanız gerekiyor bir göz atalım. Öncelikle, ekibinize yeni bir dili ve cross-platform beceresini öğretmeniz ya da bu konuda yetkin birilerini işe almanız, native ile uyumlu çalışacak altyapıyı kurmanız (muhtemelen bazı modülleri izole etmeniz gerekecektir) ve hangi kısımları bu çözüm ile geliştirebileceğinizi belirlemek için efor harcamanız gerekiyor. Uzun vadede yatırımınızın karşılığını alma ihtimaliniz yüksek ama kısa vade için ne zaman ne de maliyet avantajından söz etmek çok mümkün değil. Bir de aynı senaryoda KMM bize ne sağlayabilir ona bakalım. Öncelikle yeni bir dil ya da yetkinlik öğrenmenize gerek yok. Android geliştirme yapan bir kişi düzgün bir mimari ile günlük yaptığı işe aynen devam edebilir. Yapmanız gereken mevcut projelere KMM’yi entegre etmek ve kod havuzlarını birleştirmek, daha sonra da Android geliştirmelerinin bir miktar önden gideceği bir akış oturtmak. Bu sayede standart bir özellik geliştirmesi için Android tarafında geliştirilen kodun %60-70'ini hiç bir ekstra efor sarfetmeden iOS tarafında kullanma şansınız var. Muhtemelen teoride göründüğü kadar kolay bir süreç olmayacaktır ve platform spesifik noktalara müdahale etmeniz gerekecektir. Buna rağmen, böyle bir senaryo için kullanıcı deneyiminden ödün vermeden ya da kompleks problemlere yol açmadan kod paylaşmanın en makul yolu ileride KMM olacak gibi görünüyor.


Özetleyecek olursam her cross-platform çözümünün belirli avantajları ve dezavantajları var, önemli olan projenizi ve ekibinizi doğru analiz edip sizin için en uygun yolu seçmek. Bu analizi daha doğru ve sistematik yapmak için bizim de ekip olarak desteklediğimiz Interaction Room çalışmasını önerebilirim.


Bir sonraki yazım biraz daha teknik içerikli olacak, KMM ortam kurulumundan ve ilk deneme projemi oluştururken neler yaptığımdan bahsedeceğim. Görüşmek üzere…


#cross #kotlin #kmm #adesso


2 yorum

Son Paylaşımlar

Hepsini Gör

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
imageedit_2_9667998092.png
JetBrains Hakkında Detaylı Bilgi Alın

© 2021 by mobiler.dev

Kurumsal Yazar Hesapları

adesso.png
mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın