Mobil uygulama geliştirmeye başlayan çoğu kişinin aklına ilk gelen soru sizce nedir? Bu soruyu yazılım geliştiricilere sorsak büyük çoğunluğunun “Native mi Hybrid mi?” diyeceğine eminim. Ben de mobil uygulama geliştirmeye başlamadan önce bu soruyu kendime defalarca sordum. Kesin ve tek cevabı olmayan bu soruyu bir de bu yazı aracılığıyla sizlere aktarmak istedim.
İlk olarak hybrid(hibrit) ve native uygulamanın ne olduğuna kısaca değinelim.
native-hybrit-mobileNative uygulama, üzerinde çalıştığı platformun yazılımsal ve donanımsal olanaklarına doğrudan erişebilen, cihazın kendi ana platformu tarafından desteklenen bir dille yazılmış ve derlenmiş uygulamalara denir. Java ile geliştirilen Android uygulamaları, Objective C veya Swift ile geliştirilen iOS uygulamaları native uygulama örnekleridir.
Hybrid uygulama ise tek kod ile yazılan ve birden fazla platformda çalışabilen uygulamalardır. Bu uygulamalar HTML5, CSS3 ve JavaScript‘in gücü üzerine inşa edilerek cihazlarda çalıştırılır. Native uygulamalar gibi sistem kaynaklarına doğrudan değil de bir ara katman ile erişir. Aynı zamanda cross-platform(çarpraz platform) uygulama geliştirme olarak da adlandırılan bu yaklaşımda, tüm platformlar için aynı sonuç üretilir ve tek bir dil kullanarak native benzeri bir uygulama oluşturmak hedeflenir.
Özetlemek gerekirse; hybrid uygulama bir kez kod yazıp tüm platformlar için(iOS, Android, Windows) native uygulama geliştirebilme çabasıdır. “Harika birşey bu, ne güzel…” dediğinizi duyar gibiyim! Bir kez yazacağım ve tüm platformlar için uygulamam çalışacak hale gelecek. Eğer uygulamayı ileride güncellemem gerekirse yine aynı kod üzerinden geliştirmeye devam edip, tek bir kod ile tüm platformlara native uygulama hazırlayabileceğim. Dahası bu geliştirdiğim uygulama App Store, Google Play gibi uygulama mağazalarından indirilebilecek.
Evet teorik olarak yukarıda anlattığım herşey doğru. Hybrit uygulama ilk bakışta oldukça cazip geliyor. Fazlaları var gibi, peki eksiği ve olumsuz yönleri yok mudur? Ya da neden çoğu kurum bunun yerine native uygulama geliştirmeyi tercih ediyor?
Tüm bu sorulara cevap vermeden önce bir de konuyu native uygulama geliştirme yönüyle ele alalım.
Native uygulama geliştiriyorsanız, örneğin eğer native bir iOS uygulaması geliştiriyorsak, Apple’ın bize sunduğu ve iOS işletim sistemine uygulama geliştirmek için bilmemiz gereken bir uygulama geliştirme dilini öğrenmemiz gerekiyor. Bu uygulama geliştirme dili Objective C veya Swift olacaktır. Eğer Android için native uygulama geliştirmek istiyorsak bilmemiz gereken dil ise Java. Ayrıca yine bu dilleri kullanarak uygulamayı geliştirebileceğimiz bir IDE lazım. iOS için bu IDE’nın ismi Xcode, Android için Android Studio(veya Eclipse, Netbeans). Bitti mi? Hayır! Eğer iOS geliştirmek istiyorsanız muhakkak bir Mac OSX işletim sistemli bir bilgisayarınız olması lazım. Gördüğünüz gibi Hybrid uygulama geliştirmeye kıyasla çok daha fazla “maddi” kaynak ve insan gücü gerekiyor.
Bunlar olumsuz yönler, tabii ki native uygulamaların birçok olumlu yönü de var. Performans, görsel olarak işletim sistemine tam uyumlu arayüzler, kontroller kullanabilme olanağı, işletim sistemine tam uyumlu olması ve açık olan tüm kaynaklara doğrudan erişme olanağı aklıma gelen olumlu yanları.
Konuyu daha anlaşılır hale getirmek için hybrid uygulama geliştirme açısından konuyu artılar-eksiler şeklinde listeleyelim:
Hybrid uygulama geliştirmenin artıları
– Kodu bir defa yaz, aynı uygulama her platformda çalışsın. ‘write once, run everywhere’ mottosu
– Bakım ve güncelleme maliyeti daha düşük. Dili veya ortamı bilen tek yazılımcı ile tüm platformlarda uygulama yayınlayabilme olanağı.
– Daha kısa zamanda uygulama yapma imkanı. Tek kod, tek tasarım, tek proje, dolayısıyla daha hızlı geliştirme, ürün çıkarma ve kullanıcılara daha hızlı ulaşma olanağı.
Hybrid uygulama geliştirmenin eksileri
– Uygulamanın performansında gözle görülür yavaşlıklar olabilir. Hybrid uygulamalar gün geçtikçe performans açığını kapatıyor, ama yine de bu konuda native uygulamaların gerisinde.
– Görsel olarak native uygulamanın verdiği hazdan uzak kalması. Tek arayüz geliştirdiğiniz için buton, input vb. kontrollerin dizilimi, yerleri, görünümleri kullanıcıya biraz yabancı gelebiliyor. Sonuçta iOS ve Android uygulamalarının kendine has ekran özellikleri var. Tasarım sizin için çok önemliyse hybrid uygulama seçimini gözden geçirmelisiniz.
– Apple ve Google’ın çıkaracağı her yeni sürümde ortaya çıkan uyuşmazlıkların firmalar tarafından hızlıca çözüm bulunamaması. İşletim sistemi güncellemeleri ve yamalar bazen uygulama arayüzüne ve davranışına etki edebiliyor. Bu durum native uygulamalara çok yansımazken, hybrit uygulamalarda uyuşmazlıklar çıkabiliyor.
– IDE seçimi. Hybrit uygulama geliştirmek için birçok çatı ve IDE bulunuyor. Cordova, PhoneGap, Titanyum, Smartface… gibi. Her IDE’nin farklı kullanım şekli, farklı geliştirme yöntemleri ve dilleri olabiliyor. Bugün Xamarin’de geliştirme yapıyorken, yarın farklı bir IDE’ye geçmek zorunda kalırsanız yeni ortamı tanımanız, öğrenmeniz biraz zamanınızı alacaktır.
native-hybrid-advantages
Sonuç olarak konuyu bir yere bağlayamadık, farkındayım. Zaten yazının başında da “kesin ve tek cevabı olmayan bir soru” demiştik hybrit-native seçimi için. Bu konuda sayfalarca yazabiliriz, saatlerce tartışabiliriz. Bu sorunun cevabı tamamen sizin hedefinizin, uygulama içeriğinizin, uygulamaya yaptırmak istediklerinize, elinizdeki olanaklara ve kaynaklara göre değişecektir. Bir bankanın mobil şubesi için native uygulama tercih edebiliyorken, bir haber okuma uygulaması için hybrit uygulamayı tercih edebilirsiniz. bağlı olarak değişecektir.
Bu konuda karar vermenizi etkileyecek bir hikayeyi anlatmak istiyorum; sektörü belirtmeyeceğim, o zaman anlaşılabilir. Bir firma hybrid bir uygulama çıkarmış ve büyük ilgi sonucunda kısa sürede onbinlerde kullanıcıya ulaşmıştı. Hatta mobil ve internet uygulamalarında milyon TL’lik aylık cirolara ulaşmıştı. İlerleyen zaman içerisinde Apple iPhone telefonlar için bir güncelleme yayınlamıştı. Bu güncellemeyi cihazlarına indiren kullanıcılar ise uygulamayı açarken hata alıp uygulamaya erişememişti. Bu sorun 10 gün sonra ancak çözülmüştü. 10 günlük süre içerisinde müşterilerinizin size ulaşamaması hem maddi anlamda hem de firma itibarı anlamda çok olumsuz bir durum.
Bu yaşanmış hikayeden şu sonucu çıkarabiliriz:
Eğer çok büyük kitleye uygulama geliştiriyorsak,
Uygulamamız telefonun özelliklerini çok fazla ve etkin şekilde kullanıyorsa
Uygulama sadece veri alıp göstermek gibi basit bir işin dışında çok fazla görevi varsa
Uygulamada görsel ve performans yönlerinden kaygılarınız varsa
native uygulamayı seçmek sizin için önemlidir.
Diğer yandan, eğer uygulamanız;
Basit şekilde veri çekip kullanıcıya gösteriyorsa(örneğin gazetelerin basit şekilde haber gösterimi yaptığı bir uygulama)
Görsel arayüzün önemli olmadığı bir uygulama olacaksa
Maddi olarak bütçeniz az ise ve geliştirici kadronuzu çok büyütme şansınız yoksa
Daha kısa sürede uygulama geliştirilmesi isteniyorsa
hybrid uygulama seçimi sizin için daha mantıklı olacaktır.
Ahsis Yazılım Ekibi olarak faydalı görünen firmaların yada ürünlerin tanıtımı için kullanılacak reklam alanı.