Blog

Native ama hızlı mobil uygulama geliştirme(React vs Flutter)

Merhaba,

Hybrid vs Native arasındaki farkları anlatmıştım. Artık hybrid deki kötü performansı kimse istemiyor bunda hemfikir olduğumuzu sanıyorum. Bu yazımı okumayanlar buradan okuyabilir.
https://ferhatbalaban.com/hybrid-vs-native/

Bu yazımda native mobil uygulama yaparken nasıl daha hızlı yaparız konusuna değineceğim.

Biliyorsunuz native app , yada bilmeyenler için kısaca anlatayım 🙂 , android uygulaması android studio da Java yada Kotlin dilleri ile yazılırken, Ios uygulaması ise Xcode da Swift yada Objective-C ile yazılıyor. Son zamanlarda daha çok swift tercih ediliyor.

Tamam bunda bir sorun yok ama bir uygulamayı yazmak için 1 backend, 1 android 1 ios yazılımcısı gerekiyor ve maliyetler artıyor. Teknoloji artık çok hızlı ilerliyor ve her firmanın, her girişimin bir mobil uygulaması olmaya başladı. Bu nedenden herkes bir arayış içinde.

Native performansı olsun, ancak nasıl daha hızlı hem ios hem android için kod geliştirebilirim?

Herkes bu arayış içinde ve maliyetleri azaltırken aynı zamanda daha hızlı uygulamalar çıkarmak peşinde. Bunun içinde karşımıza ortak bir dilde tek yerde kod yazabileceğiniz ama sonuçta kodu android için ayrı ios için ayrı bir native koda dönüştüren 2 platformdan bahsedeceğim. React Native ve Flutter.

React Native, Facebook tarafından başlatılmış bir proje ve 2015 yılında açık kaynak olarak açılarak herkesin kullanımına sunuldu. O günden bu yana birçok kullanıcı kitlesine ulaştı.

Flutter ise 2017 yılında Google tarafından duyruldu ve kullanımı giderek artıyor.

Şimdi bu 2 mobil uygulama platformunun geleceğinden, farklarından ve biz eğer bir ortak dilde yazıp bu işi yapmak istiyorsak hangisini seçmeliyiz bundan bahsedeceğim.

Öncelikle benim görüşüm şu oldu bugüne kadar. Bu tip ortak dilde yazılan ve sonuçta android ve ios uygulama üreten sistemlere ben biraz uzak durdum ve uzaktan izledim. Mesela react native de yazılmış uygulamalar geldi karşıma ve insanların bazı sorunları kolay çözemediğini ve tıkandığını gördüm. Yeri geldiğinde framework yetersiz kalınca gerçek native ile kod yazma ihtiyaçları ortaya çıktığına şahit oldum. Native de bize basit gelen hataların framework ün kendisinin ayrı bir yapısı olduğundan ve iyi bilinmeyince çözülemediğini gördüm. Ancak dert o kadar büyük ki bu arayış devam ediyor ve bunu gören google da kendisi android i desteklemesine rağmen Flutter ı çıkartarak bu derde bir çözüm sunduğunu göstermiş oldu. Çünkü ios içinde google ın hazırladığı birçok mobil uygulama var ve bu dertden tüm dünya gibi onlarda çekiyor.

Programlama dili olarak React Native, javascript dilini kullanırken (tabi kendine ait bir yapısı ve kuralları var yine frameworkün), Flutter ise Dart programlama dilini kullanıyor. Dart yine Google ın 2011 de geliştirdiği bir dil ve kullanımı çok yaygın değil ama javascript oldukça yaygın. Bu açıdan React Native , Flutter a göre biraz daha avantajlı görünüyor. Buradan React Native e +1 veriyorum.
Sonuç: React 1 – Flutter 0

Teknik altyapı olarak React Native js altyapısına dayandığından ve native e çevirirken biraz köprü vazifesi gören bir sistem üstünden çevirim yapıyor ve kötü performans verebiliyor ancak Flutter kendi içinde hemen hemen tüm native kütüphaneleri barındırdığından native sistem ile haberleşmek için ayrı birşeye ihtiyaç duymuyor. Bu konuda Flutter +1
Sonuç: React 1 – Flutter 1

Kurulum konusunda React Native NPM(Node Package Manager) ile daha rahat kurulurken Flutter bu konuda biraz manuel kurulum aşamasında kalmış. En kısa zamanda iyileştireceklerini düşünsemde React Native bu konuda +1
Sonuç: React 2 Flutter 1

Proje Hazırlığı konusunda Flutter hem android hem ios için daha açıklayıcı bilgilere sahip. Mesela React da IOS dökümantasyonu biraz zayıf. Ayrıca Flutter da yer alan flutter doctor her kontrolü yaparak hazır olup olmadığınızı denetliyor. Bu konuda Flutter +1
Sonuç: React 2 – Flutter 2

UI (Arayüz) ve Development API konusunda ise native bileşenlere sorunsuz ulaşmak çok önemli. React native UI bileşenleri ve bazı native erişim API ı sunsada birçok konuda 3rd party yani dışarıdan eklenen plugin lere ihtiyaç duyuyorsunuz. Herkes kendi en iyi plugin ini yapmaya çalışıyor ya da bulmaya çalışıyor. Başkalarının geliştirdiği bu plugin ler hatalı kalabildiği gibi bir süre sonra destek kesilebiliyor ve projeniz de siz bu plugin i geliştirmediğiniz için zor durumda kalıyor. Flutter da ise kendi içinde ihtiyaç duyacağınız hemen hemen herşey var. Bence bu aslında +3 ve bir yazılımcı için en önemli şey. Hatta benim react native e uzak durmamdaki sebeplerden biri bu. Hadi yinede adil olsun diye bu maddeye de Flutter +1 diyelim.
Sonuç: React 2 – Flutter 3

Geliştirme Hızı konusunda yazılımcı js biliyorsa React Native(RN) de hızlı kod geliştirebiliyor. Js bile çok yazılımcı var ama RN için bence js den daha çok kendi kuralları olduğu için RN bilen kişi aranıyor. Js bilmesi avantaj tabi ama kurallar çok iyi öğrenilmesi lazım. Flutter da ise Dart dilinin öğrenilmesi lazım. Çok zor değil ancak çok yaygın değil. Flutter yaygınlaştıkça bu açığı kapatacak görünüyor ancak şu an için RN +1
Sonuç: React 3 – Flutter 3

Destek konusunda React Native daha önce çıktığı ve daha çok kullanıldığı için daha büyük bir kitle tarafından destekleniyor. Bu konuda yine Flutter geriden gelse de açığı kapatması bekleniyor.
RN +1
Sonuç: React 4 – Flutter 3

Test konusunda React Native de birkaç 3rd party çözüm var ancak Flutter bu konuda kendi içinde çok güzel çözümlere sahip. Cihaza aktarmadan uygulamanızı test tool ları üzerinden deneyip test edebiliyorsunuz.
Flutter +1
Sonuç: React 4 – Flutter 4

Yayına alma konusunda React Native de otomatik çözümler yok ancak Flutter CLI ile build (derleme) ve release (yayına alma) işlemleri yapabildiğiniz gibi Fastlane ile otomatik build ayarları yapabiliyorsunuz. Bunun nasıl yapılacağı güzel anlatılmış. React da da fastlane kullanılabilir ama dökümantasyon konusunda zayıf gibi geldi bana. Sonuç olarak bu konuda Flutter +1
Sonuç: React 4 – Flutter 5

Bakım ve Sürekli Geliştirme konusunda React Native de yine detaylı birşey bulamadık ancak Flutter da bu konuda gerekli bilgiler mevcut ve CLI ile yapılabiliyor. Bu sayede hataları giderip kullanıcılar teste açma , geri bildirim alıp tekrar teste gönderme süreçleri daha hızlı ilerliyor.
Flutter +1
Sonuç: React 4 – Flutter 6

Sonuç olarak iki sisteminde kendi artıları eksiler var. Flutter daha avantajlı görünüyor. Bu konuda ona bir şans vermeyi düşünüyorum. Bazı mobil uygulamaları Flutter ile yapıp denemek lazım. Ancak bu tip framework ler sonuçta Google da geliştirse Facebook da geliştirse bir şekilde bir yerlerde tıkanmanıza yol açabiliyor. İçeride React ya da Flutter bilen yazılımcılar olması gerekiyor. Bu konuya eğildiğinizde ve tüm yazılım dilinizi değiştirmeye başladığınızda sonradan sorun yaşarsanız kötü olabiliyor.

Basit ve sıfırdan yapılacak uygulamalarda bu yöntemlere şans verilirken. Kritik uygulamalar bence hala gerçek ait olduğu yerde yazılmalı. Sonuç olarak hiçbir ara framework gerçek native de yazmak gibi olmayacaktır. Orada ne isterseniz yapacağınız kesinken bu ara tek dilde yazalım framework leri hep bir firmaya birilerine ihtiyaç duyacağınız anlamına geliyor. Örneğin facebook kapanır yada React Native i bırakırsa ne olacak? Çok kritik bir app yapıyorsanız sizde mi bırakacaksınız ya da komple sıfırdan mı yazacaksınız. Ya da Google, Flutter a gerektiği önemi vermez ise?

Ancak şu da var. Şans da vermek lazım. Flutter’ın geleceği parlak gözüküyor. Mesela Alibaba flutter a geçmiş ve çok memnunlar bu video yu izleyebilirsiniz.

Karar vermek zor ancak dediğim gibi basit kurgusu olan bazı app ler Flutter ile yapılabilir. Benim düşüncem bu yönde. Neden bilmem ben React Native e zaten ısınamamıştım sorunlarından dolayı. Şimdi daha heyecanlandım Flutter ile.

Alibaba, Flutter ile 50 milyon üzerindeki kullanıcıya uygulama geliştiriyor.


Mobil Uygulama Geliştirme

Merhaba,

Mobil uygulama geliştirmek isteyenler yada mobil uygulama yaptırmak isteyenler için mobil uygulama geliştirme nasıl oluyor ve aşamaları neler bunları aktarmak istiyorum. Çünkü sürekli sorulan bu sorulara basit ve anlaşılır cevaplar vermek çok önemli.

1 – Mobil Uygulama Geliştirmelerini Kimler Yapar?

Mobil Uygulama bir yazılım firması yada bu işi bilen mobil uygulama yazılımcısı tarafından yapılabilir. Burada kimin yaptığından daha çok nasıl destek alacağınız ve nasıl çalışacağını önemlidir. Genelde freelance mobil yazılımcı olarak çalışanlar ek bir iş olarak bu işi yapabilmektedir ve buda bazı sıkıntıları beraberinde getirir. Freelance sürekli bu iş ile uğraşıyorsa yani bir yerde çalışıp ek zamanında yapmıyorsa sürekli bu işle uğraşıyorsa sorun olmayabilir ancak bu durumda da yaptığı işi yasal yapıyormu , en azından şahıs firması varmı ve referansları sağlam mı sorgulamak gerekir. Eğer bir yerde çalışıyor ve bu işi yapıyorsa o zaman işiniz yapılsa bile devamında destek konusunda sıkıntılar yaşayabilirsiniz. Bir mobil uygulama yapıldıktan sonrada sıkıntı yaşadığınızda bu işi başkasına aktarmak o kadar kolay bir iş değildir. Bu yüzden en iyi çözüm seçtiğiniz firma yada kişi ile devam etmektedir. Ancak bu konuda aktarım yapmak durumunda kalırsanız da bir başka yazımızda anlatacağımız bu yazının konusu olmayan yazımı okumanızı tavsiye ederim. Linki burada daha sonra paylaşacağım.

İş yaptığınız firma yada şahıstan mutlaka bu bilgileri isteyin.

  • Firma yada şahıs referanslarında bulunduğu web sitesi
  • Ne kadar zamandır bu işi yapıyor
  • Hangi yöntemi kullanıyor? (Madde 2 de anlattığım 3 yöntemden biri?)
  • Sonrasında nasıl destek veriyor?
  • Destek vermez ise ne olacak? Bu durumda desteği garanti altına almak için sözleşme yapmanızı şiddetle tavsiye ederim.
  • Tasarım konusunda çözüm sunabiliyor mu? Bunu sizde başka birileri ile çalışarak halledebilirsiniz ancak tek bir yerden tüm hizmetleri almanız daha iyi olacaktır. Bu yüzden bunu mutlaka sorun. Eğer bu konuda hizmet vermiyorsa başka bir çözüm bulmanız gerekecektir.
  • Proje bazlı anlaştınız devamında ek istekleriniz çıktı bu durumda ek istekler için nasıl bir fiyatlama yapıyor. Örneğin adam/gün ücreti nedir. Bir işin kaç gün süreceğini neye göre belirliyor.

2 – Mobil Uygulama Geliştirmesi Nasıl Yapılır?

Mobil uygulama 3 farklı şekilde hazırlanabilir. Günümüzde en çok tercih edilen bu 3 yöntemi ve avantaj dezavantajlarını da başka bir yazımda paylaşacağım bu yazıyı çok uzun tutmamak adına şimdilik bu 3 yöntemden bahsedelim.

2-a – Native Mobil Uygulama Geliştirme:

Native dediğimiz uygulama geliştirme yöntemi aslında Google ve Apple ın önerdiği her platforma yani android e uygun Android Studio da Java yada Kotlin dilleri ile veya Ios için Xcode Uygulamasında Swift yada Objective-C dilinde yapılan geliştirmelerdir. Günümüzde Android için Java , Ios için Swift dilleri daha çok tercih edilmektedir. Kotlin yaklaşık 1 sene oldu aşağı yukarı çıkalı ancak şahsi görüşüm ben ısınamadım bana garip geldi. Java yada Swift i tercih ederim. Eğer projenize sıfırdan başlanacak ise ve ileride yazılımcı bulma konusunda sıkıntı yaşamak istemiyorsanız en çok tercih edilen bu dilleri kullanan mobil yazılımcıları yada firmaları tercih etmenizi öneririm.

Bu aşamadan sonra diğer anlatılan yöntemlere Cross Platform Mobil Uygulama Geliştirme Yöntemleri denir. Cross platform özetle bir ortamda geliştirme yapıp 2 platform içinde uygulama üretebilmektir. Android için ayrı Ios için ayrı kod yazılmaz. Bu maliyet ve zaman konusunda tasarruf etmenizi sağlar. Ancak madem bu kadar iyi neden öyle yapmıyor herkes dediğinizi duyar gibiyim 🙂 Elbette dezavantajları da var. Bunları da yine anlatacağım.

2-b React Native ile Mobil Uygulama Geliştirme:

Facebook tarafından desteklenen bir cross platform. Facebook uygulamasında mesela bu kullanılıyor.

Ancak detaya girmeden daha fazla ingilizce bilenler yada çeviri yaparak bu yazıyı okuyabilirsiniz.

https://medium.com/mop-developers/mobile-app-development-react-native-vs-native-ios-android-49c5c168045b

Özetle şunu söylüyor , facebook uygulamasında da kullanılan bu sistem facebook tarafından bir gün desteklenmez ise ne olacak. Yada facebook react native de çıkan hataları facebook app ini çok etkilemiyorsa 2. öncelik vererek sonraya bırakabiliyor. Yada google ve apple ın yeni çıkardığı bir özellik react native de sonradan yapılabiliyor.

Avantajı ise aynı anda 2 platform içinde mobil uygulama geliştirme yapabilmesi. Bu yüzden çok tercih ediliyor. Yoksa kimse native varken riske girmek istemez yada facebook böyle bir işe soyunmaz.

2-c Cordova ile Mobil Uygulama Geliştirme

Cordova aslında cihaz içindeki browser da çalışan html tabanlı bir uygulama sunuyor. Basit işler için tercih edilebilir ancak native bir uygulama hissiyatı veremiyor. Bu yüzden bence en son tercih edilecek seçenek bu. Bu konuda daha önceki yazılarımu şu linkden bakarak okuyabilirsiniz https://ferhatbalaban.com/tag/cordova/

2-d Soru; Özet;

React native kullanmaya değer mi?  Cevap: Değişir ancak çoğu sorunun cevabı gördüğünüz üzere Native dir.

Sadece ios yada sadece android uygulama mı yaptıracaksınız ? Native
Küçük bir ekibiniz yada kısıtlı zamanınız ve bütçeniz mi var?  React Native.
Çok kapsamlı bir uygulama mı yaptıracaksınız ? Native.
Yaptırdığınız mobil uygulama çok uzun süreler hayatta kalacak mı, Facebook a ya birşey olursa korkunuzu atamıyormusunuz? Native.
Çıkar çıkmaz yeni cihaz özelliklerini desteklemeye ihtiyacınız var mı ? Native.

Genel Özet;

Tüm bu kriterleri değerlendirerek mobil yazılım geliştirme yapacak yada yaptıracak iseniz çalışacağını kişiyi ve çalıştığı platformu iyi değerlendirin. İşiniz için büyük emekler verip paralar harcıyorsanız iyi düşünmek ve iyi bir karar vermek çok önemli diye düşünüyorum. Sorularınız olursa ana sayfadaki iletişim bölümünden benimle irtibata geçebilirsiniz.

 

Saygılar, sevgiler.