Burak Buldu

O bir Teknoloji KurduGalatasaray taraftarıIT ProfesyoneliAntalyalı

Bir aydan daha kısa sürede hem Android hem iOs uygulaması nasıl geliştirdim?

Merhaba sevgili takipçilerim. Bu kez uzun bir yazıyla karşınızdayım. Geçtiğimiz haftalarda oldukça fazla teknik bilgiler içeren konular paylaşmıştım ancak bugün biraz deneyim paylaşmak üzere bir deneme yayınlamayı uygun buldum. Eğer son haftalarda beni sık takip ettiyseniz son dönemde Apache Cordova ile ilgili birkaç paylaşımım oldu. Bu süreçlerin arkasından da Otokaca uygulamalarını yayınladık. Tahmin edeceğiniz üzere bu uygulamalar Apache Cordova ile geliştirildi. Herneyse güzel bir başlığımız var ve konumuzu baştan alalım. Bir aydan kısa sürede bir uygulama nasıl yayınlanır?

Öncelikle bahsetmek istediğim ilk konu, sizi bundan birkaç yıl öncesine götürecek. Çalışmalarım sayfasında KPSS Puan Hesaplama diye bir mobil uygulamadan bahsediyorum, epey zaman önce UWP (Universal Windows Platform) için yayınlamıştım. Tabi o zamanlar Microsoft birşeyler yapıyor mobil platformlar için, çok sevgili dostum Savaş da Android uygulama geliştirip markete attığından bahsediyordu. Nasıl yaptın falan derken, MIT App Inventor diye bir oluşumdan söz etmişti. JS olarak hazırladım, oraya kodlarımı frame ettikten sonra apk’yı alıp Google Play Store’a yükledim demişti. Ben de o zamanlar şimdi kapalı olan Microsoft’un bir platformundan haberdardım, .Net framework’ünde zaten C# ve VS Basic ile birşeyler kurcaladğım sıralardı. Dedim sen bana ver JS dosyasını, arayüzü hazırlayıp benzeri bir uygulamayı da Windows marketine atalım. O da neden olmasın deyip paylaştı. Daha sonra ben geliştirip yayınladım ama hiç güncellemedim. Aslında fena da değildi, iyi indiriliyordu ama üzerine düşmedim. İlk mobil deneyim hikayem budur. Gelelim günümüze…

Aradan yıllar geçmiş, yüksek lisans yaparken bir işe başlamışım. İşletmenin webde sunduğu bazı hizmetlerin, mobil uygulama hizmetleri olarak da sunulması gerekiyor. Müşteri talebi var, hemen aradan çıkarılması lazım bu işlerin. Ama öyle hadi yapalım demekle de olmaz, önce bir analiz etme, keşifler yapma, planlama gibi bir çok süreç olacak. Öncelikle ne isteniyor, elimizde neler var, ne yapabiliriz gibi soruların cevaplarını aradım. En kısa sürede, temiz, güzel ve hızlı çalışan, ilk aşamada websitesindeki iki hizmeti müşterilere sunacak hem android hem de ios için birer uygulama isteniyor. Elimizde responsive tasarım yapılmış bir websitesi, web servisler var.

 

Bir sonraki mesele neler yapabiliriz, işte burası önemli. Mobil için Native, Hybrit ve Progressive uygulama olmak üzere üç temel geliştirme seçeneklerimiz var. Native dediğimiz doğal yani direkt kendi platformuna özel geliştirilmiş uygulamalardır. Örneğin Swift ile bir iOs uygulaması yapmak, Java ile bir Android uygulama geliştirmek veyahut c# yada visual basic ile asp.net bir web projesi geliştirmek gibi işler Native programlama diye tanımlanır. Hybrit’e geçmeden önce Progressive bir uygulama ise tam ismi Progressive Web App yani bir web uygulamasıdır. Her yerde çalışacak şekilde platform bağımsız işler için uygundur. Hybrit dediğimiz uygulamalar ise Native ve Progressive arasıdır denilebilir ancak benim dikkatimi çeken konu burada, aslında bir çok platform Native’den çok Progressive uygulamalara daha yakın destek veriyorlar (React Native hariç). İlk olarak alışık olduğum bir yerden gideyim dedim,Xamarin vardı diye Visual Studio ile hallederim diye düşündüm ama MacOs üzerinden çalıştığım için ve MacOs’a da yeni yeni alıştığımdan çok sıkıntı yaşadım. Daha sonrasında bana kalan seçenekler React Native, PhoneGap, Ionic ve Cordova oldu. Burada React Native bir ayrı tutuyorum. Çünkü diğer araçlara göre Native geliştirmeye en yakın hizmeti React Native veriyor. Ancak Cross-Platform geliştirirken, native geliştirmeye yakın bir projede değilseniz ve Webview üzerinde çalışan uygulamanız çok hantal bir hal alacaktır.

Asıl konuya dönmeden önce şu hantallığın detayını bir açıklayalım. Evet hibrit uygulamalar, progressive uygulamalar webview temelli çalışıyorsa ki progressive demek mecburi webview üzerinde çalışacaktır, hantal bir uygulama olacaktır. Çünkü webview dediğimiz şey, programlamadan en uzak kişinin anlayacağı tabirle bir google chrome, bir internet explorer veya bir safaridir. Yani bir browser bir web tarayıcısıdır. Bunların da ne kadar bellek tüketip, işlemciye yüklendiğini sağır sultan bile bilir. Bu yüzden özellikle dikkatinizi çekerim ki, bir oyun geliştirecekseniz kesinlikle webview üzerinde olmasın, olabildiğince native geliştirin. Neyse ki webview ne kadar ağır bir araç olsa da bizim projemiz webview üzerine inşa edildiğinde o kadar da hantal çalışmayacaktı ve kolay bir çözümdü. Çünkü altı üstü birkaç form verisi gönderip, gelen sonucu html, css ve js ile ekrana yansıtacaktık. Bir oyun değildi, megabytelarca kodlar içeren bir uygulama değildi.

Projemiz için en uygun çözümün webview ile çalışan bir uygulama olmasına karar verdikten sonra, platform seçimine geldi sıra. İşte React Native’i ilk başta bu yüzden hiç kullanmadım. Çünkü Native kodlama ihtiyacımız olmadığı gibi, mobil görünüme sahip bir websitemiz vardı. Oradaki html, css ve js kodlarından faydalanarak daha hızlı yol alabilirdim. React Native ile diğer platformların kıyaslamarını inceledim ve kabiliyetlerini araştırdım. Ionic ve PhoneGap zaten Apache Cordova üzerinden geliştirilmiş araçlardı ve hatta PhoneGap Adobe tarafından satın alınmıştı (Apache Cordova zaten Adobe ürünü). Benim için ya Cordova ya da React Native seçeneği kalınca çok kolay bir şekilde Cordova’yı seçtim. Çünkü React Native incelemelerinde webview’in çok yavaş çalıştığından bahsediyordu deneyimleyenler ve Cordova açısından benim projemde tek farkı ReactJS kütüphanesine sahip olmasıydı. Ancak Apache Cordova’ya da istenildiği takdirde ReactJS kütüphanesi eklenebiliyordu ve ihtiyacım var mıydı? O zaman için ReactJS’ye hiç ihtiyaç duymadım ama duyarsam zamanı gelince düşünürüm. React Native zaten ReactJS kütüphanesi üzerine kurgulandığı için böyle bir ismi var ve arkasında olan şirket de Facebook. Bir çok popüler uygulama da bunun üzerine hazırlandığı için piyasası bu yüzden popüler. Ve sonuçta platformumuzu seçtik ve kolları sıvayıp projeye başladık.

İlk başlarda epey garipsedim çünkü Node.JS falan ömrümde kullanmamışım. Terminale hiç değmemişim. Cordova için bunlar mecburi olması gerekenler. Ama 1-2 günde kavradım nedir, nasıl proje hazırlanır, build edilir vs. çözdüm. Birkaç hafta arayüzleri aktarıp, tüm tablet ve telefonlara uyum sağlayacak ekranlar hazırlamakla geçti. Çünkü Bootstrap’ın verdiği imkan, hd ekranlardan daha küçük ekranlara yetmiyordu. E biraz da websitesindeki görünüm her ekranda da olmuyordu. Bunun yanı sıra yeni sıfır ekranlara da ihtiyaç olduğu gibi mobile uygulamaların ikonlarıydı splash sreenleriydi derken zaman tabi alıyor. Hem sıfır deneyim, hem tek sorumluluğun mobil geliştirmek olmamasının etkili olduğunu da unutmayalım. Bu arayüzler geliştirilirken aynı zamanda cordova pluginlerini de epey öğrendim. En önemlisi cross-platform hizmet veren bu araçların çıktılarını kriptolamamız gerektiği oldu. Ama aslında böyle bir eksikliğin olmasını da mantıklı buluyorum. Tüm kodlar açık olacak ki, bu kodlar derlenirken hem java’ya hem swift’e uyarlanacak. Bu yüzden kripto önemli diyelim ve bir başka adım geçelim. Bir iki hafta böyle derken tasarımları bitirdik geriye bir tek web servisleri eklemek kaldı.

Native geliştirme yapmazsanız en önemli olay burada dönüyor. Herhangi bir web servisi Javascript ile çağırıp kullanacaksınız. Bu yüzden Javascript ve bununla ilgili ihtiyaç duyacağınız kütüphaneleri öğrenmenizde fayda var. Jquery olmadan olmuyor diyebilirim. Javascript’i hatırlasam da Jquery biraz unutmuştum, bu yüzden hatırlamaktı falan derken web servisleri entegre etmek 2 günde bitti ve mis gibi uygulama çalışmaya başladı. Ardından kullanıcılara deneyimletip, yorumlar alıp düzeltmeler yapılacak, buglar giderilecek ve son olarak marketlere paylaşılacaktı. Test sürecinde ilk olarak Android’i ele aldık çünkü bir cihaza APK dosyayı yüklemek, iPhone’a IPA yükletmekten daha çabuk ve basit. Bu arada test süreci derken, geliştirme esnasında simulasyon araçlarıyla olsun, web browser’da olsun hep test gerçekleştiriyordum. Bu yüzden o canlıya geçmeden önceki test ile aynı süreçler olarak anlaşılmasını istemem. Velhasıl nasıl olsa benzeri görünümler olduğu için Apple sona kalsın dedik ve teste başladık. Bir hafta test süreci geçirdik, bir çok değişiklik yaptık ve bir Google Play Store Developer hesabı açıp yayınladık. Hemen arkasında bir iPhone cihazda test ettik ve onu yayına aldık. Google bizim uygulamamızı 2 saat demeden yayınlamasına karşın Apple ilk başta bir uğraştırdı. İlk başta sertifikalar, izinler ve paketleri imzalama süreçleri çok kafamı karıştırdı ancak hallettim. Daha sonraki bir başka sorun ise Apple 2017 Temmuz’unda test ortamındaki ağını iPv6 yapmış. Hata öngördükleri iPv6 desteğinin olmamasını ve bir diğer basit bir konuyu güzel bir dille cevapladım. Aslında bu oyalanma olmasaydı daha hızlı olabilirdi ancak 2 günde de App Store‘da yayınlandık. Bu süreçte her şeyi sıfırdan öğrenmiş gibi bir durum yaşadım ancak açıkcası yıllar önceki Microsoft deneyimim hem daha basit hem de daha hızlı işliyordu. Teknoloji ilerledikçe hayatı kolaylaştırıyor derken bazen de zorlaştırıyor diyebilir miyiz?

Sorularınızı sosyal ağlardan alabilirim. İyi günler.

Paylaş