Native mi, platformlar arası mı? Doğru mobil uygulama yaklaşımını seçmek
Her mobil uygulama projesi bu kararla erkenden karşılaşır: iOS ve Android için her platformun kendi native araçlarıyla (Swift/Kotlin) ayrı ayrı mı geliştirmeli, yoksa Flutter veya React Native gibi platformlar arası bir framework'le bir kez geliştirip ortak bir kod tabanından iki platforma birden mi yayınlamalı? Herkes için doğru tek bir cevap yok. Doğru ellerde iki yaklaşım da mükemmel uygulamalar ortaya çıkarır; doğru seçim, hangi seçeneğin kulağa daha modern geldiğinden çok uygulamanın gerçekte ne yapması gerektiğine bağlıdır.
Native size ne kazandırır?
Native geliştirme, doğrudan her platformun kendi SDK'sı üzerinde kod yazmak ve Apple ya da Google yeni bir işletim sistemi özelliğini yayınladığı anda, ilk günden itibaren ona tam erişim sahibi olmak demektir. Performans burada genellikle en üst seviyededir; özellikle grafik yoğun, animasyon ağırlıklı ya da donanımla sıkı entegrasyona dayanan her şeyde: kamera işleme, artırılmış gerçeklik, arka planda konum takibi, karmaşık sensör füzyonu. Uygulama ayrıca, ikisini birden taklit etmeye çalışan ortak bir soyutlama katmanı yerine platformun kendi arayüz bileşenleriyle geliştirildiği için, çalıştığı platformun görünümüne ve hissine birebir uyar.
Bedeli ise iki farklı dilde, çoğu zaman iki ayrı ekiple ya da en azından iki ayrı platform uzmanlığıyla, iki ayrı kod tabanının bakımını yapmanızdır. Özellikler iki kez geliştirilir. Hatalar iki kez düzeltilir. Bu yalnızca başlangıçtaki bir maliyet değil, gerçek ve sürekli bir yüktür.
Platformlar arası geliştirme size ne kazandırır?
Flutter ve React Native gibi framework'ler, bir ekibin uygulamanın büyük kısmını bir kez yazıp hem iOS'a hem Android'e yayınlamasını sağlar. Bu, gerçek dünyadaki uygulamaların çok büyük bir bölümü için hem geliştirme süresinde hem de süregelen bakımda gerçek ve ciddi bir tasarruf demektir. Çoğu kurumsal uygulama, çoğu içerik ve e-ticaret uygulaması ve çoğu şirket içi araç, kodunun ezici çoğunluğunu native'in açık üstünlük sağladığı derin platforma özgü işlere değil; iş mantığına, API çağrılarına, formlara ve standart arayüze ayırır.
Modern platformlar arası framework'ler, eskiden aleyhlerine gerçek bir argüman olan performans farkının büyük kısmını kapattı. Özellikle Flutter, native koda derlenir ve bir JavaScript köprüsünden geçmek yerine kendi arayüzünü kendisi çizer; uygulamaların büyük çoğunluğunda kullanıcılar farkı anlayamaz. Platformlar arası yaklaşımın hâlâ geride kaldığı yerler, yepyeni işletim sistemi özelliklerine ilk günden erişim (Apple ya da Google'ın yeni duyurduğu bir özelliği bir framework'ün sunması genellikle biraz zaman alır) ve native'in sağladığı mutlak performans tavanını istediğiniz, gerçekten donanım yoğun kullanım senaryolarıdır.
Gerçekte nasıl karar verilir?
- Native'i seçin: Uygulama grafik ya da performans açısından kritikse (oyunlar, artırılmış gerçeklik, yoğun gerçek zamanlı işleme), yeni işletim sistemi düzeyindeki özelliklere derin ve anında erişim gerekiyorsa ya da iki platformun mantığının çoğunu paylaşmak yerine gerçekten çok farklı davranması gerekiyorsa.
- Platformlar arası yaklaşımı seçin: Standart bir kurumsal, içerik, e-ticaret veya araç uygulaması geliştiriyorsanız; ekibi ikiye katlamadan hızlı ilerleyip ürünü iki platformda da doğrulamanız gerekiyorsa ya da iki ayrı native kod tabanının bakımını yapmanın gerçekçi olmadığı daha kısıtlı bir bütçeniz varsa.
- Hibrit bir yaklaşımı değerlendirin: Uygulamanın büyük kısmı platformlar arası, buna gerçekten ihtiyaç duyan tek özellik için ise native bir modül. Büyük framework'lerin çoğu bunu baştan yazmayı gerektirmeden destekler.
Teknoloji yığınından daha önemli olan karar
Ekipler bazen native ile platformlar arası arasındaki seçim üzerine kararın gerçekte hak ettiğinden çok daha uzun kafa yorar; oysa çoğu zaman daha belirleyici olan, uygulamayı kimin ve ne kadar özenle geliştirdiğidir. Hem iOS hem Android kurallarını iyi bilen bir ekibin geliştirdiği platformlar arası bir uygulama, kötü geliştirilmiş native bir uygulamayı her zaman geride bırakır; tersi de geçerlidir. Framework bir araçtır; nihai sonucun doğru hissettirip hissettirmediğini belirleyen, ürünün gerçekte neye ihtiyaç duyduğuna dair verilen karardır.
Burncode'da hem native hem platformlar arası uygulamalar geliştiriyoruz ve her mobil uygulama geliştirme projesindeki ilk gerçek görüşmemiz, o yıl hangi yaklaşım trendse ona yönelmek değil, geliştirdiğiniz ürüne gerçekten hangisinin uyduğunu belirlemektir.