Mobil Uygulama Geliştiricinin İlk Sorusu: Native mi, Hybrid mi?
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 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.
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.
13 Comments
Görkem
10 Kasım 2016 at 13:33Güzel ve faydalı bir yazı olmuş..
ahmet
10 Kasım 2016 at 17:13Yazı için çok teşekkür ederim, Peki Xamarin Native mi ?
Rumeli Depolama
27 Ocak 2017 at 17:41Yazı için çok teşekkürler. Native uygulamalar geliştirmek oldukça mantıklı ancak donanımsal maliyetler buna engele olabiliyor.Her developer kendine ait bir MAC bilgisayar alamıyor tabi. Ancak dediğiniz gibi küçük uygulamalarda Hybrid uygulamalar geliştirmek daha basit olacaktır.Sonuçta developer’ların çoğu Jquery bildikleri için Jquery Mobile ile daha kolay işler yapabileceklerdir.
Biri
8 Şubat 2017 at 08:08” Görsel olarak native uygulamanın verdiği hazdan uzak kalması. ” maddesi çok kişisel bir yargı tek bir tasarım teorik olarak var iş üstünde yapan kişi zaten bu kısmı akıl edemiyorsa bir sorunu vardır ya da acemidir, bir yazılımcı aynı zamanda bir geliştirici de olabilir. Bu durumda çeşitli temalar yazıp uygulamayı daha kişiselleştirilebilir hale getirilebilir. Android ve ios platformundaki kitle genelde değil tema yazmayı sürükle bırak ile iş yaptığı için asıl native kullanan kesim görsel facialara neden oluyor. Windows Phone için yazılan bir uygulama işkembeden yazılmadığı için geliştiricinin diğer platformlara uygulama yazarken aynı özeni gösteriyor olması ios ve android kesiminin görsel anlamda ortalama olarak çok ileride olmadığı aşikar.
Bir diğer nokta ise hibrit yazılım yazan kişi anında ulaşılabilir ve tüm platformlara hakim olamaması sorunu yaratan bir diğer nokta. Eğer ki kişi bu özeni gösteremiyorsa zaten onunla çalışılması hata, yani hibrit olmasında bir sıkıntı yok. android ve ios gibi platformların bir güncelleme ile uygulamanın çalışmaz hale gelmesi sistemin yeteri olgunluğa ulaşamadığını gösterir ki, çoğu zaman çevremden aldığım geri bildirimlere göre mağazadaki uygulamalar bile işletim sistemi sürümüne öylesine bağlı ki sanırsın her güncelleme ile devrim yapmışlar ama gerçekte buz dağının görünmeyen kısmı daha acı bir durumu temsil ediyor.
Github gibi platformlar ve apiler, uyumlu kütüphaneler, örnekler sayesinde bir gazete değil native uygulamaların yapabildiği her şeyi yapmak mümkün, tabi biraz daha yavaş olabilir dediğiniz gibi ama bunu kullanıcı hissedecek düzeyde olmamalı, sonuçta milisaniyeler ile işlem yapılıyor, uzun süren işlemler varsa yine sistemin sorunudur ve çözülmesi gerken nokta onlarla ilgilidir.
Gördüğüm birçok platformda hibrit kötü bir şekilde lanse edilirken ona yeteri kadar özen göstermeyen sistemleri kimse anmıyor bile, bu yazının bir de windows, android ve ios işletim sistemi açısından ele alınması gerekir.
Anonim
25 Şubat 2017 at 11:34Jquery Mobile olayı ile küçük uygulamalar yapmak oldukça kolay ve daha rahat ancak dökuman bulmak biraz sıkıntı oluyor.Hata verdiğinde bu hatalar eğer sık rastlanmayan hatalar ise daha da sıkıntı oluyor.Bir de sormak istediğim bir olay daha var. Uygulamanın boyutlarını düşürmek için nasıl bir yol izlememiz gerekir hakkında bir makale yazarsanız çok faydalı olacağını umuyorum…
Eşya Depolama
27 Temmuz 2017 at 15:52yazı için çok teşekkürler gerçekten açıklayıcı olmuş
Oğuzhan
4 Ağustos 2017 at 17:51Diğer bir arkadaşın da söylediği gibi ” Görsel olarak native uygulamanın verdiği hazdan uzak kalması. ” kısmına bende katılmıyorum gerçi tamam hepimizin yorumu kişisel olabilir bu konuda ama IDE’leri araştırdığımda UI olarak hiçte kötü gelmedi gözüme.
uğur yalçın
20 Ekim 2017 at 18:53Adam harbiden güzel anlatmış vesselam. Hitabet de iyi olunca, makaleyi okurken keyif alıyor insan. Emek harcandığı belli. Teşekkürler üstad.
Ramazan
21 Aralık 2017 at 19:42Mükemmel anlatım çok faydalı olmuş tşkler
Onur
26 Aralık 2017 at 13:00Hibrit.
dogu
22 Ocak 2018 at 18:211-) Hybrid application ile uygulama içi satın almayı bir kere denemenizde fayda var eminim bir daha yanından bile geçmezssiniz.
2-) Hybrid uygulamada componentlerin çoğunu copy past ile elde edip çalışmadığı yerlerde sağdan soldan çalışan component arayarak günlerinizi bitirirsiniz.
3-) Hybrid uygulamda hiç bir şekilde memory ve cpu testleri doğru görüntülenmez dolayısı ile yaptığınız uygulama kaynakları çabuk tükettiğinde başınıza çok ciddi dertler alabilirsiniz.
İşin doğrusu bir müşteri için ve doğal olarak para karşılığı uygulama geliştiriyorsanız, müşteriyi doğabilecek olumsuzluklar konusunda mutlaka uyarmak gerekiyor.Biz mobil app oldukça fazla yazıyoruz ama native.Bir daha asla hybrid uygulamanın problemlerinden kaynaklanan zaman kaybıyla uğraşmak istemeyiz.Zamanınız çok ise deneyin az ise native öğrenin bir kez zaman kaybedersiniz.
Elcan
1 Mart 2018 at 00:57Hybrid uygulamaya ornek Instagram. Basit tasarimmi? Hayr. Ona gore de hem native hem de hybrit kendi arti ve eksileri var. Kisiden kisiye degisir
Alper
30 Mayıs 2018 at 21:11Makale için çok teşekkürler.