Odak noktamız web’deki içeriklerden mobildeki içeriklere doğru değişirken, mobil cihazlarımız iletişim kurma, içerik tüketme, iş yapma şeklimiz başta olmak üzere pek çok alanda hayati bir rol oynamaya başladı. Her tür kuruluş ve işletme için, mobil uygulamalar, yarışta ortalamanın ilerisinde olma ve müşterilerle ilişkide kalabilme açısından artık bir seçenek değil, bir zorunluluktur. Hibrit mobil geliştirmeye ve native mobil geliştirme hakkındaki metodolojiler, riskler ve araçlar konusunda daha fazlasını öğrenmek için yazımızı okuyun.
Mobil Uygulama Geliştirme alanında daha yeniyseniz, "Mobil Uygulama Nasıl Geliştirilir?" blog yazımıza da göz atabilirsiniz.
Öncesinde, mobil uygulama geliştirenlerin en çok tercih ettikleri popüler programlama dillerine göz atalım!
Mobil Uygulama Geliştirenlerin Tercih Ettiği 5 Programlama Dili
WhatsApp, Facebook Messenger, Instagram, YouTube, Google Haritalar, Twitter, E-Devlet, Sahibinden, Tiktok… Akıllı telefon uygulamaları günlük hayatımızın vazgeçilmez bir parçası haline geldi. Bu uygulamaları bağlantı oluşturmak, bilgi almak, alışveriş yapmak veya sadece eğlenmek için her gün kullanıyoruz!
Mobil uygulama geliştirmek de oldukça zevkli bir iş ama dikkat edilmesi gereken konular var. Doğru programlama dilini seçmek de bu konuların başında geliyor. İşte, mobil uygulama geliştiricilerin en çok tercih ettikleri 5 programlama dili:
Java
Tahmin edebileceğiniz gibi en çok tercih edilen programlama dillerinin başında Android Uygulama Geliştirme'nin resmi dili olan Java geliyor. Play Store’da gördüğümüz uygulamaların büyük çoğunluğu Java ile oluşturulmuştur ve aynı zamanda Java, Google’ın en çok desteklediği dildir. Java’yı tercih edenlerin memnun olduğu başka bir konu da, yaşadıkları herhangi bir sorun durumunda destek bulabildikleri başarılı bir çevrimiçi Java topluluğu olmasıdır.
Fakat yeni başlayanlar için Java zor ve karmaşık bir dildir. Özellikle The Android Software Development Kit (SDK) yeni başlayan mobil uygulama geliştiricileri zorlayacaktır. Eğer Java dilinde iddialıysanız ve kendinizi daha da geliştirerek mobil uygulama alanında çalışmak istiyorsanız bu eğitimimize göz atabilirsiniz: Advanced Java Programming.
Python
2021’in en popüler programlama dillerinin başını çeken Python da mobil uygulama geliştirmek için kullanılabilir. Her ne kadar Android, native Python geliştirmeyi desteklemese de, Python uygulamalarını Android cihazlarda çalışabilen Android Paketlerine dönüştüren çeşitli araçlardan (Kivy gibi) faydalanarak bu sorunu çözebilirsiniz.
Mobil uygulama geliştirme şirketlerinin ölçeklenebilirlik, esneklik gibi özelliklere ve işlevlere ihtiyacı vardır ve Python programlama dili tüm bu özellikleri sunmaktadır. Instagram ve Dropbox gibi uygulamaların da Python kullanarak oluşturulduğunu biliyoruz.
Python’da uzmanlaşmanın en doğru yolunu görmek için bu sayfamızı inceleyebilirsiniz. Adroid Uygulama Geliştirme eğitimimiz de ilginizi çekebilir!
C#
Programlama dili olarak C#, Java’ya çok benzer ve bu nedenle mobil uygulama geliştirmek için idealdir. Ayrıca, Microsoft tarafından desteklenmesi nedeniyle gittikçe popülerleşen Xamarin platformu sayesinde, C# kullanarak tüm mobil platformlarla uyumlu uygulamalar geliştirebilirsiniz. Bunlar Native mobil uygulamalar olacaktır ve android, iOS ve Windows gibi çeşitli platformlarda uyum sağlayacaktır.
Ayrıca C#, Java'dan daha temiz ve basit bir söz dizimine sahip olduğu için, kodlamayı nispeten kolaylaştırır. Yani yeni başlayanlar için Java’dan daha iyi bir seçim olabilir. Xamarin kullanarak cross-platform mobil uygulamalar geliştirmek istiyorsanız eğitimimize katılabilirsiniz: Developing Cross-Platform Apps with C# Using Xamarin.
Kotlin
Kotlin, 2017’de ikinci “official” Java dili olarak tanıtılmış, Java sanal makinesi üzerinde çalışan statik tipli bir programlama dilidir. Aynı zamanda bir çapraz platform (cross-platform) yazılım dilidir. 2017’den beri Google tarafından da desteklenen Kotlin'i kullanarak, mobil uygulamalar geliştirirken Java’dan da faydalanmaya devam edebilirsiniz.
Java’dan daha basit bir dil olan Kotlin, uygulamaların daha iyi görünmelerini de sağlayabiliyor. Kotlin Multiplatform Mobile sayesinde, iOS, Windows ve Android uygulamalarının hepsiyle uyumlu tek bir kod tabanı kullanarak işinizi kolaylaştırabilirsiniz. Yalnızca gerekli durumlarda platforma özel kod yazmanız gerekir ve bu sayede vakit kazanabilirsiniz. Hatta, hali hazırda bir mobil uygulamanız varsa, Kotlin kullanarak bu uygulamayı da her platforma uyumlu hale getirebilirsiniz.
C++
C ++, Android Yerel Geliştirme Kiti (NDK) (“Android Native Development Kit”) kullanılarak Android Uygulama Geliştirme için kullanılabilir. Ancak, bir uygulama tamamen C ++ kullanılarak oluşturulamaz. Bu durumda NDK, uygulamanın gerekli bölümlerini C++ yerel kodunda uygulamak için kullanılır.
C++ programlama dili bazı durumlarda mobil uygulama geliştirme için tercih edilse de, kurulumu çok daha zor ve esnekliği oldukça azdır. Karmaşık bir dil olması nedeniyle bug’ları da arttırabilir yani daha fazla hataya yol açabilir. Bu nedenle bir kıyaslama yapmamız gerekirse, bu yazımızda yer alan diller arasında en az kullanışlı olan C++ dilidir demek mümkün.
Mobil bir uygulama geliştirirken göz önünde bulundurulacak ilk şey, hedef kitlenizin alışkanlıkları ve davranışlarıdır. Bu kişilerim işletmenizle ve uygulamanızda sunulan ürünler veya hizmetlerle nasıl etkileşim kuracaklarını anladığınız zaman, mobil aygıtlar aracılığıyla işletmenizi etkili bir şekilde yönetmenize olanak sağlayan bir uygulama yaratabileceksiniz.
Şimdi bir mobil uygulama yaratmaya ihtiyaç duyduğunuzu belirlediğinize göre, nereden başlamalısınız? Ürün, hizmet ve müşterilerinizin iş gereksinimlerine cevap verecek bir mobil uygulama yaratmak, başlatmak ve sürdürmek için, mobil stratejinize el atmadan önce göz önünde bulundurmanız gereken birkaç önemli faktör vardır. Bunlar arasında, ekibiniz (eğer varsa) tarafından sahip olunan geliştirme becerilerinin seviyesini belirleme, hangi tiplerde aygıt fonksiyonelliği gerektiğini ve güvenliğin, çevrimdışı yeteneklerin ve birlikte işlerliğin önemini anlama vardır.
Çoğu durumda, geliştirme stratejisi bakımından “mükemmel” tercih yoktur, fakat konu geliştirme rotanız olduğunda ilerisiyle ilgili planlama yapmak, uygulamanızı geliştirme konusunda doğru yolu belirlemenizde size yardımcı olacaktır.
Native uygulamalar; iOS, Android ve daha az boyutlarda Windows Mobile gibi mobil işletim sistemlerine özgü geliştirme araçları ve dilleri kullanarak geliştirilir.
Hibrit uygulamalar, bir native kapsayıcısı içine gömülü HTML5’ten inşa edilir ve hibrit ve native tasarım öğeleri uygulamayı oluşturmak için bir araya gelir.
Bu iki metodoloji arasındaki tercih son yıllarda geliştiriciler ve işletmeler arasında tartışmalara yol açmıştır çünkü her ikisi de hem avantajlar hem de dezavantajlar sunar.
Native uygulamalar genellikle, belirli bir mobil işletim sistemi için geliştirilmiş tablet ve akıllı telefon uygulamalarıdır. iPhone için uygulamalar geliştirenler Objective C veya Swift ile X-code kullanarak kod yazarlar. Android geliştiricileriyse Android stüdyo ve Java kodu kullanırlar; gerçi Kotlin de oldukça popüler hale geldi.
Native bir metodoloji kullanarak geliştirilmiş uygulamalar daha iyi bir kullanıcı deneyimine (UX) sahiptir çünkü daha hızlı çalışır ve veri ve grafikleri yüksek hızlarda işlerler; bu, karmaşık algoritmalara dayanan oyunlar veya foto düzenleme uygulamaları yaratan geliştiriciler için oldukça önemlidir. Kullanıcı deneyimi kalitesini artırarak, özel olarak Android, veya iOS için geliştirilmiş uygulamalar, kullanıcılarının alışık oldukları platforma özgü kullanıcı arabirimi (UI) standartlarını kusursuz şekilde karşılar. Bu, Android’de materyal dizaynının kullanımını, fiziksel ya da her yerde olan “geri tuşu”nu veya kullanıcıların bileceği “swipe-heavy” iOS gezintisini içerebilmektedir. Bunlar ufak noktalar gibi gözükebilse de, mobil cihazlarımızda gezme şeklimiz, her gün saatlerce yaptığımız, çoğumuza kolay gelen bir şeydir ve alıştığımız gibi akıcı olmayan bir gezinti sinir bozucu olabilmektedir. İşlevsellik de native mobil geliştirme için büyük bir avantajdır çünkü hem Apple hem Android işletim sistemleri dahilinde kamera, kişiler, mikrofon, takvim gibi native geliştirme aracılığı ile kolayca erişilebilen çekirdek özelliklere sahiptir; hibrit uygulamalara ise sınırlı erişim verilir.
Son olarak, bir uygulamanın başarılı olabilmesi için hem Google Play hem de App Store’da sergilenmesi gerekir. Keşfedilmenin en iyi yolu “Editör’ün Seçimi” olarak öne veyahut vitrine çıkarılmaktadır. Öne çıkmak günlük 1000’lerce indirilmeye yol açabilmektedir fakat bu genellikle her bir platform tarafından yayınlanan en son OS özelliklerinden faydalanmanıza bağlıdır, bu da native geliştirmeye bağlıdır.
İlk olarak, native uygulamaların geliştirilmesi daha zordur çünkü geliştiricilerin Objective-C, Swift, Kotlin ve diğer yüksek odaklı dillerde akıcı olmaları gerekir. Mobil dillerde branşlaşmak isteyen geliştiricilerin karşılaştığı bir başka engel şudur: bu belirli dilleri öğrenmek için mevcut olan kaynaklar genellikle ya çok teorik ya da çok pratiktir. İyi dengeli kaynaklar bulmak zor olabilmektedir.
Ek olarak, her bir işletim sistemi için yazılmış platforma özgü kodun ayrı diller ve API süreçlerinden dolayı iOS’ten Android’e ve tersi yönde tekrar yazılması gerekir.
Son olarak, iki ayrı geliştirme ekibini idame ettirmenin maliyeti mobil bir uygulama ihtiyacında olan pek çok kuruluş için fazla maliyetli olabilmektedir.
Hibrit uygulamalar esasen native bir shell arkasındaki web uygulamalarıdır ve bu sebeple sadece bir uygulamanın geliştirilmesi gerekir çünkü bu, hem Android hem iOS cihazlara adapte olabilmekte ve benimseyebilmektedir. Çoğu hibrit uygulama HTML5, CSS ve Javascript çapraz-uyumlu web teknolojileri kullanılarak yaratılır. Hibrit geliştirme, Cordova ( ve PhoneGap gibi Cordova-tabanlı araçlar), Appcelerator Titanium ve Xamarin gibi platformlar tarafından olanaklı kılınır.
Cordova’da geliştirme, bir web sayfası oluşturmak için ihtiyaç duyulan geliştirmeye benzerdir; html, CSS ve JS, hepsi Cordova’da paketlenmiş bir web görünümü yaratmak için bir araya gelir.
Titanium’u Cordova’dan ve PhoneGap gibi Cordova-tabanlı araçlardan ayıran, eğer hem native hem HTML-tabanlı kullanıcı arayüzü kullanan bir uygulama yaratmak istemiyorsanız, HTML ve CSS dosyalarına ihtiyaç olmamasıdır. Titanium, uygulamanızı bir tarayıcı yerine gerçek platformda emüle (ya da simüle) etmenize yardımcı olan oldukça faydalı bir mobil araç kitiyle gelir. Uygulamanız cihazda çalıştırıldığında, bir web görünümüne paketlenmez bunun yerine bir Javascript motoru tarafından yorumlanır. (iOS’ta JavaScriptCore veya Android’de Rhino)
Xamarin’in, geliştiricilerin native kullanıcı arayüzleri olan ve C#’ye odaklanan birden çok platformda kod paylaşan, native Android, iOS ve Windows uygulamaları yazmak için kullanabilecekleri C#-shared bir kod tabanı vardır. Xamarin, Cordova’ya benzer şekilde çalışır.
Hibrit uygulamalar daha hızlıdır ve geliştirilmeleri daha basittir. Bunun yanında sürdürülmesi de daha kolaydır çünkü çoklu platforma özgü olanların aksine sadece bir kod tabanı ile ilgilenirsiniz. Hibrit uygulamanızı geliştirmeyi bitirdiğinizde, bir kod satırı ile ek platformlar ilave edebilirsiniz. Hibrit uygulamalar geliştirmedeki basitlik, geliştiricilerin aynı uygulamanın platforma özgü versiyonlarını geliştirebilmek için ek diller öğrenmelerini gerektirmemesinden gelir. Ek olarak, hibrit uygulamalar tüm platformlar için bir dile dayandığından, geliştirme bittiği zaman, hibrit uygulamalar her iki platform için de kullanıma hazırdır.
Daha hızlı ve geliştirmesi native uygulamalara göre daha basit olmakla birlikte, hibrit uygulamalar, native uygulamaların sunduğu “gerçek” platforma özgü kullanıcı deneyimine sahip değildir. Ayrıca hibrit metodolojisini kullanan geliştiriciler, bazı ilave eklentiler olmasına rağmen kamera, GPS, takvim gibi çekirdek cihaz özelliklerine erişimi kaybetme durumuyla karşılaşırlar. Son olarak hibrit uygulamalar, konu performans ve özellikle oyunlardaki gibi grafikler olduğunda, native uygulamaların gerisinde kalır. Ayrıca bir uygulamanın iki işletim sistemine adapte ediliyor olmasından dolayı, kullanıcılar, native uygulamalarla karşılaştırıldığında uygulamalarındaki etkileşimde bir farklılık olduğunu hissedeceklerdir.
Her bir metodolojinin avantaj ve handikaplarını belirlediğimize göre, uygulamanız için hangi metodolojinin doğru olduğunu anlama yolunda hangi sorular sorulmalı?
Çekirdek cihaza, platforma ve özelliklere erişmeye ihtiyaç duyacaksınız, aradığınız yanıt native’dir. Hibrit geliştiriciler için, kullanılan framerwork’e bağlı olarak, native özelliklere erişim sınırlı olabilmekte hatta olmayabilmektedir.
Pazarlama zamanı, nihai olarak kuruluşunuzun kaynaklarına ve uygulamalarına bağlıdır fakat eğer zaman bir etmense, hibrit geliştirme aynı zamanda, daha kısa bir zaman diliminde daha fazla platformda lansman yapmanıza olanak sağlayacaktır.
Native geliştirme, muhtemelen bildiğiniz üzere, bütçeye oldukça bağlıdır. Asgari düzeyde bile, mevcut geliştiricilerinizin etkili bir şekilde iki platform için iki versiyon geliştirme yolunda kendilerini eğitmeleri ve yeni diller öğrenmeleri gerekir. Çoğu durumda, iki ayrı geliştirme ekibi tutmak için bir bütçe ayırmanız gerekebilmektedir. Eğer iOS ve Android için özel olarak kod yazacak geliştiriciler tutma ve eğitme için bütçeniz ve vaktiniz yoksa uygulamanızı hibrit metodolojisi kullanarak geliştirmeniz daha iyi olabilir.
Uygulamanızı sık sık güncellemeyi planlıyorsanız, tercih edilen metodoloji olarak hibriti seçmek isteyebilirsiniz. Uygulamanıza veya işlevselliğine integral bir değişiklik yapmıyorsanız, bir satır kod, her bir platform üzerinde o güncellemeyi uygulamanıza vermenize yetecektir. Sık güncellemeler pek çok bankacılık uygulaması ve başlıca yeni uygulamanın hibriti seçmesinin nedenlerinden biridir.
Önemli bir soru. Native uygulamalar, konu son kullanıcıya daha yüksek kaliteli, hızlı ve alıştıkları gibi bir kullanıcı deneyimi sunma olduğunda hibritlerin önündedir. Kullanıcılarınıza mümkün olan en iyi kullanıcı deneyimini sunmak önemliyse, seçiminiz kesinlikle native geliştirme olmalıdır. Deneyimli front end geliştiriciler, hibrit kullanıcı deneyimini bir native deneyime yakın hale getirebilseler de, tamamen native bir deneyimin yerini asla tutamaz.
Çoğu modern web uygulaması gibi mobil uygulamalar, hayatlarımıza değer katmakta ama önemli riskleri de beraberlerinde getirmektedir. Hangi geliştirme metodolojisinin ihtiyaçlarınıza en iyi uyduğunu göz önünde bulundururken, güvenlik de karar verme sürecinizde önemli bir rol oynamalıdır.
Native uygulamaların çeşitli sebeplerden dolayı hibrit uygulamalardan daha güvenli olduğu düşünülür. Platforma özgü dahili güvenlik özelliklerini sonuna kadar kullanabilmeleri bu sebepler arasındadır. Hibrit uygulamaların web görünümlerine bağımlı oldukları gerçeği, belli API’leri kullandıkları zaman injection ataklarına yatkın olmaları anlamına gelir. Saldırı yüzeyini asgariye indirmek için her bir platforma özgü çeşitli teknikler, araçlar ve üçüncü parti kütüphaneler sağlanmaktadır.
Native uygulamaların güvenliğine gelince, suistimal teknikleri ve araçları farklı olmasına rağmen zaafiyetler tüm platformlar için neredeyse aynıdır. Android’de native uygulamalar, saldırganların potansiyel olarak cihaz üzerine bir shell koyarak veya sadece uygulamanın yedeğini alarak suistimal edebilecekleri telefonun yerel veri deposunda hassas veriler depoluyor olabilir.
iOS üzerinde, bilgisayar korsanları benzer bir vektör aracılığıyla çalışabilirler.
Hibrit uygulamalar da hassasiyetlerden muaf değildir; özellikle de iyi yazılmamış kodları varsa…
Hibrit uygulamalar web görünümlerini yaygın şekilde kullanırlar. Bu, eğer kod doğru şekilde güvenlik altına alınmadıysa uygulamayı potansiyel suiistimallere karşı açık bırakır. JavaScript veya HTML’ye özgü herhangi bir saldırı ayrıca hibrit uygulamalar için de bir tehdittir ve backend API’yle alakalı hassas noktalar da yaygındır. Uygulamanıza karşı saldırılara tam bir koruyucu çözüm olmasa da, tehditleri asgariye indirmenin yollarından biri sadece dahili güvenlik kontrolleri olan güvenli frameworkler’le çalışmaktır. İlave olarak, ters mühendislik man-in- the-middle (iki bağlantı noktası arasındaki bağlantıyı izinsiz izleme) saldırılar da hibrit uygulamaları tehdit etmektedir.
Evet, hem Apple hem Google’ın uygulamanızın yayınlanması için uyması gereken bir gereklilikler listesi yayınlamasına rağmen, hibrit uygulamalar geliştiren geliştiricilerin çoğu, düzeltilmesi ve yeniden teslim edilmesi gereken retlerle karşılaştıklarından kendilerini onaylanma kısmında takılmış olarak bulabilmekteler.
Android’de, hibrit uygulamaların onaylanması yaklaşık 3 gün hatta bir haftaya kadar zaman alırken, native uygulamaların onaylanması yaklaşık 24 saat alır.
Kaygılar diğer özelliklerin kullanıldığı zamanlardakilerle aynı; eğer webGL kullanıyorsanız, uygulamanızın karşılaşabileceği web saldırılarından haberdar olmalısınız. Fakat bunlar henüz yeterince kategorize edilmemiştir
Web-tabanlı hibrit uygulamalar en az güvenli olanıdır ve kod yazarken özellikle de uygulama dahilinde bilgilerin nerede depolanacağıyla ilgili dikkatli olmadıysanız web siteleri kadar korunmasız olabilmektedir. Eğer geliştirme için Cordova kullanıyorsanız, uygulamanız için koruma sağlamaya yardımcı olabilecek eklentiler olsa da uygulamanızın güvensiz olduğunu göz önünde bulundurmalısınız.
Evet. Checkmarx OWASP top 10 mobil tehditleri için özel olarak tarama yapar, bu da kodunuzdaki hangi kategorilerin en büyük zafiyetlere sahip olduğunu anlamanıza yardımcı olur. Checkmarx taramaları ayrıca mobil uygulamalar için özel raporlar sağlar.
Ionic, gerçek bir native görünüm ve hisse en yakını sunan Titanium’a yaklaşıyor. Aslında o kadar yakın ki bazı kullanıcılar hibrit bir uygulamada olduklarını fark etmeyecekler bile. Gerçekten iyi tasarımlanmış Ionic veya Titanium, uygulama, hatta Cordova ile, her zaman UI/UX’te ufak boşluklar olsa da, gerçek bir native uygulamanın görünüş ve hissine yaklaşabileceksiniz.
Mobil güvenliğinizi test etmenize yardımcı olacak açık kaynak çözümler olsa da, bu çözümler genellikle genel güvenlik değerlendirmesi için tarama yapmak yerine belirli saldırılara odaklanır. Checkmarx tüm 20 programlama dilinde ve bunların en yaygın frameworklerinde güvenlik, kalite ve uyumluluk sorunları için tarama yapar ve uygulamanızın güvenlik durumu konusunda size en iyi anlayışı sunar.
OWASP Project Mobile Top 10’daki bu iki tehdit, benzer gözükse de, aslında farklıdırlar. M4 (Güvensiz Yetkilendirme) genellikle gerekli olduğu zaman kullanıcıyı belirlemede başarısız olduğunuz zamandaki gibi son kullanıcı (kötü oturum) yönetimi ile alakalıdır. M6 (Güvensiz Yetkilendirme) yetkilendirmedeki başarısızlıklarla ilgilidir. Kullanıcıyla ilgili yetkilendirmeden arklı olan istemci/müşteri tarafındaki (forced browsing) yetkilendirme. Tehditlerden biri, kötü oturum yönetimi ile ilgilidir, diğeri yetkilendirmedeki başarısızlıkları yakalar.