Rehber
Mobil Uygulamada Native mi, Çapraz Platform mu? Kotlin, Swift, Flutter ve React Native Karşılaştırması
Native geliştirme ile çapraz platform arasındaki seçim donanım ihtiyacına, arayüze ve bakımı kimin yapacağına bağlıdır. Kotlin, Swift, Flutter ve React Native’in artıları, eksileri ve karar soruları.
· 4 dk okuma · Mood Reklam
Android ve iOS için iki ayrı uygulama mı yazılmalı, yoksa tek bir kodla ikisine birden mi çıkılmalı? Mobil uygulama yaptırmaya karar veren her işletme bu soruyla karşılaşır ve yanıt çoğu zaman ezbere verilir: “Tek kod, yarı emek.” Gerçek biraz daha karışıktır. Doğru seçim, uygulamanın telefonun nelerine eriştiğine, ne kadar uzun yaşayacağına ve yayından sonra kimin bakacağına bağlıdır.
Native geliştirme, her platformun kendi diliyle ve kendi araçlarıyla yazılmasıdır: Android için Kotlin, iOS için Swift. Ortaya iki ayrı kod tabanı çıkar. Çapraz platform geliştirme ise tek bir kod tabanından iki platforma da uygulama üretir; Flutter ve React Native bu grubun en bilinen iki aracıdır. İkisinde de sonuç mağazadan indirilen gerçek bir uygulamadır; fark, nasıl üretildiğinde ve hangi ödünlerin verildiğindedir. Uygulamanın baştan sona nasıl ilerlediğini merak ediyorsanız fikirden mağazaya mobil uygulama yazısıyla başlayın.
Dört seçenek yan yana
| Seçenek | Dil | Güçlü yanı | Zayıf yanı |
|---|---|---|---|
| Native Android | Kotlin | Android’in bütün özelliklerine doğrudan erişim, platforma tam uyum | Yalnızca Android; iOS için ayrıca yazmak gerekir |
| Native iOS | Swift | iPhone’un yeni özelliklerine ilk erişim, Apple’ın kendi araçları | Yalnızca Apple cihazları; geliştirme için Mac gerekir |
| Flutter | Dart | Tek kod, iki platformda aynı görünen arayüz, hızlı arayüz geliştirme | Uygulama dosyası daha büyük; Dart bilen geliştirici daha az |
| React Native | JavaScript, TypeScript | Web tarafındaki bilgiyle mobil yazabilme, platformun kendi bileşenleri | Dış kütüphanelere bağımlılık; sürüm yükseltmeleri emek ister |
Kotlin ve Swift: her platforma kendi dili
Native geliştirmenin en büyük artısı sınırın olmamasıdır. Telefonun kamerası, Bluetooth’u, arka planda çalışma izni, bildirim ayrıntıları ya da işletim sisteminin yeni çıkan bir özelliği; hepsine ilk ve tam erişim native uygulamadadır. Uygulama da her platformda o platformun alışılmış davranışıyla çalışır.
Bedeli iki koldan iş yürütmektir. Her yeni özellik iki kez yazılır, iki kez denenir; iki uygulamanın aynı anda güncel kalması ayrı bir dikkat ister. Native geliştirmeyi şu durumlarda seçin: uygulama donanımı yoğun kullanıyorsa, performans kritikse ya da yalnızca tek bir platform hedefleniyorsa. Örneğin İskenderun’da liman ya da depo sahasında barkod okuyan el terminalleriyle çalışacak bir uygulama, bu tür cihazların önemli bir kısmı Android tabanlı olduğu ve üreticiler kendi yazılım araçlarını Android için sunduğu için çoğu zaman Kotlin ile daha rahat yazılır. İki platformda yalnızca içerik gösterecek basit bir uygulama için ise iki ayrı kod tabanı gereksiz bir yüktür.
Flutter: tek kod, kendi çizdiği arayüz
Flutter, Google’ın geliştirdiği açık kaynak bir araçtır ve Dart dilini kullanır. Arayüzü platformun hazır bileşenleriyle değil, kendi çizim motoruyla oluşturur. Bu yüzden uygulama Android’de de iPhone’da da birebir aynı görünür; kurumsal kimliğe göre özel tasarlanmış arayüzlerde bu bir avantajdır. Yapılan değişikliği uygulamayı kapatıp açmadan görebilmek de arayüz geliştirmeyi hızlandırır.
Zayıf yanları da bilinmelidir. Uygulama dosyası native bir uygulamaya göre büyüktür. Telefonun özel bir donanımına erişmek için ya hazır bir eklentiye ya da o kısmı native olarak yazmaya ihtiyaç duyulur; eklentinin geliştiricisi bakımı bırakırsa sorun size kalır. Dart, Flutter dışında pek kullanılmayan bir dil olduğundan ileride projeyi devralacak geliştirici bulmak daha zor olabilir. Flutter’ı arayüzü yoğun, donanım ihtiyacı sınırlı uygulamalarda düşünün; yeni bir işletim sistemi özelliğinin çıktığı gün kullanılması gereken işlerde seçmeyin.
React Native: web bilgisiyle mobil
React Native, Meta’nın başlattığı açık kaynak bir araçtır; uygulama JavaScript ya da TypeScript ile yazılır ve ekranda platformun kendi bileşenleri kullanılır. En büyük artısı, web tarafında React ile çalışan bir ekibin aynı bilgiyle mobil uygulama da yazabilmesi ve bazı kodları web paneliyle paylaşabilmesidir.
Öte yandan pek çok özellik topluluğun geliştirdiği kütüphanelere dayanır; bir kütüphane güncellenmezse ya da yeni sürümle uyumsuz kalırsa iş yavaşlar. Sürümler arası geçiş zaman zaman emek ister; yoğun grafik ya da ağır hesaplama gereken yerlerde native kod yazmak gerekebilir. Elinizde React ile yazılmış bir web paneli varsa React Native güçlü bir adaydır; yoksa tek başına bir gerekçe değildir.
Tek kod tabanı, tek iş demek değildir
Çapraz platform seçmek bazı işleri ortadan kaldırmaz. iOS uygulamasını derleyip App Store’a göndermek için hangi araç seçilirse seçilsin bir Mac (kendi bilgisayarınız ya da bulutta kiralanan bir Mac) ve Apple’ın Xcode aracı gerekir. Uygulama iki mağazaya ayrı ayrı gönderilir, iki mağazanın kurallarına ayrı ayrı uyar ve iki platformda ayrı ayrı denenir. İşletim sistemleri güncellendikçe hem uygulamanın kendisi hem kullandığı eklentiler güncellenmelidir; bu yükü yazılım bakımı ve güncelleme yazısında anlattık. Ortak iş mantığını tek yerde yazıp arayüzü her platformda native bırakan Kotlin Multiplatform gibi ara çözümler de vardır; seçenekler iki uçtan ibaret değildir.
Karar için beş soru
- Uygulama kamera, konum, Bluetooth ya da özel bir cihazla ne kadar yoğun çalışacak?
- Kullanıcılar kimler: herkes mi, yoksa telefonunu sizin verdiğiniz bir ekip mi?
- Arayüz kurumsal kimliğe göre özel mi tasarlanacak, standart bileşenler yeterli mi?
- Elinizde zaten bir web paneli var mı, hangi teknolojiyle yazılmış?
- Uygulamanın bakımını yıllarca kim yapacak ve o kişi ya da ekip hangi dili biliyor?
Son soru çoğu zaman unutulur ama en belirleyicisidir: bir uygulama yazıldığı gün değil, bakımı sürdüğü yıllar boyunca emek ister. İskenderun’da Android ve iOS için uygulama düşünüyorsanız mobil uygulama geliştirme sayfasındaki seçeneklere bakın ve fikrinizi anlatmak için arayın; hangi yolun neden önerildiğini gerekçesiyle konuşalım.