Mobil uygulama geliştirme deyince iki popüler yaklaşım karşımıza çıkar. Birinci yaklaşım platforma özel (IOS, Android vb.) native bir uygulama geliştirme, ikincisi hibrid yaklaşımlar web teknolojilerini kullanarak (HTML, CSS, Javascript) geliştirip Adobe PhoneGap gibi araçlar ile bir WebView içinde yayınlama ve üçüncü yaklaşım hibrid yaklaşımlardır. Her iki seçeneğinde avantaj ve dezavantajları vardır. Native bir uygulama daha hızlı tepki verir. Ayrıca, yerleşik özellikleri platforma özel çözümler sunar. Facebook “native uygulama geliştirmesinin sebebi olarak Native bir uygulama web’te yapabileceğinizden daha iyi ve tutarlı bir ortam sunduğunu” belirtir. Ancak, Native uygulama geliştirmenin bir bedeli var. Birinci, her platform için Native uygulama geliştirme ortamları birbirinden tamamen farklıdır. IOS için Swift veya Objective-C ile kod geliştirmek gerekirken Android için Java bilmek gerekir. Her iki ortama kod yazmak için zahmetli bir sürecimiz olacaktır. Şimdi alternatif yazılım ortamlarını tanıyalım ve kısaca karşılaştırmalar yapalım.
02.01.01. Adobe PhoneGap
Adobe PhoneGap hibrid geliştirme için en popüler çözümlerden biridir. Açık kaynak kodlu Apache Cordova kütüphanesi üzerine kurulmuş ve HTML, CSS ve Javascript kullanmaya imkan tanır. Adobe PhoneGap ile geliştirilen uygulama, native bir container olan WebView içinde bir web uygulaması gibi çalışır. Aslında WebView bir taraıcıdan hiç bir farkı yoktur. Ancak Adobe PhoneGap native API’leri sayesinde kamera, GPS ve ivmeölçer gibi cihazın içindeki cihazlardan veri alabilir.
02.01.02. Ionic
Ionic, bir diğer popüler hibrid uygulama framework’üdür. Ionic Framework ve Ionic CLI olmak üzere iki ana parçadan oluşur. Ionic framework, mobil gezinme, kaydırma listeleri, açılır pencereler gibi mobil bileşenlere sahiptir. Bu bileşenler, Angular JS framework’ü üstüne Angular directive’lerini kullanarak oluşturulmuştur. Angular’a aşina olan birine Ionic önerilebilir. Ionic CLI scaffolding, uygulamayı build etme ve uygulamayı deploy etme gibi özelliklere sahiptir. Ionic CLI, geliştiriciye birden fazla şablon sunar. Ionic’de Adobe PhoneGap gibi Cordova’nın üzerine inşa edilmiştir. Bu sebepten dolayı, Cordova etkentilerini kullanabilir.
02.01.03. NativeScript
Telerik’in açık kaynaklı NativeScript IOS ve Android için native uygulamalar oluşturmanıza olanak tanır. Aslında React Native ile çok benzer bir yaklaşıma sahiptir. Cordova seçeneklerin aksine HTML ve CSS oluşturma WebView ile yapılmaz. NativeScript, IOS ve V8(Android için)’de JavascriptCore ile cihazda çalışan Javascript’i temel alır.
02.01.04. ReactNative
React Native, Facebook tarafından Mart 2015’te yayımlanan açık kaynaklı bir projedir. React Native’in amacı, geliştiricilerin tanıdık web teknolojilerini kullanarak iOS ve Android için yüksek kaliteli yerel uygulamalar yazmalarını sağlamaktır. Web için React gibi kullanıcı arayüzleri oluşturmak için aynı bildirimsel yaklaşımı kullanır. React Native, ayrıca birçok native geliştirme verimsizliğini azaltmayı da amaçlamaktadır. React Native, klasik bir uygulama geliştirme sürecindeki yazma->derleme->deploy(dağıtma)->Hata ayıklama aşamalarından derleme ve deploy adımlarında iyileştirme sağlar. Native mobil uygulama geliştirmeden farklı olarak, React Native platformlar arasında kod paylaşımına olanak tanır. Bunun sayesinde yazdığımız bir uygulama farklı ortamlarda çalışabilir.
React Native uygulamalar Web için React’e çok benzer şekilde yazılır. Kod tarafında JavaScript kullanılır ve JSX’i kullanarak görünümlerinizi oluşturuyorsunuz. NativeScript’e benzer şekilde, React Native, WebView’e dayanmaz. React Native, React Native köprüsüyle platformda göründüğü ve hissettiği platforma özgü yerel bileşenlerle iletişim kuran gömülü bir JavaScriptCore örneği çalıştırır. React Native ayrıca, cihazın kamerasına, GPS’sine ve benzerlerine JavaScript’te erişebilmenizi sağlayan temel platform API’lerini de gösterir. NativeScript’ten en büyük farkı bir React uygulaması geliştirir gibi kod yazmanıza olanak sağlar.
02.01.05. Diğer mobil uygulama geliştirme ortamları
Önceki bölümlerde popüler bir kaç mobil uygulama geliştirme ortamını tanıttık. Aslında birçok alternatif çözüm sunulmuştur. Diğer çözümler:
- Xamarin: Microsoft’un desteklediği C# ile Android, IOS ve Microsoft platformlarına uygulama geliştirmenizi sağlar.
- Flutter: Google tarafından tanıtılmış, açık kaynak kodlu mobil uygulama geliştirme SDK’sıdır. Çok platformlu uygulamaları destekler. Dart dili ile yazılmıştır.
- Corona SDK: Corona, hem mobil cihazlar hem de masaüstü sistemleri için hızlı şekilde uygulama ve oyun (2D) geliştirmek için bir çok platformlu framework’tür. Lua dilinde geliştirilmiştir. Lua hafif(lightweight), hızlı, güçlü olarak tasarlanmış açık kaynak kodu bir script dilidir. Lua özellikle oyun geliştirme (Warcraft, Angry Birds, Civilization ve benzeri) oyunları geliştirmek için kullanılmıştır.
- JQuery Mobile: HTML5 tabanlı geliştirme framework’üdür. Geliştirilen uygulama hem telefon (WebView üzerinden) hem de tarayıcı ortamında çalışabilir. Tarayıcısı olan herhangi bir platformda çalışabilir.
- Mobile Angular UI: Bootstrap ve Angular framework’ü birleştirilmiş bir uygulamasıdır. HTML5 tabanlı ve tarayıcı üzerinden kullanılabilecek uygulamalar yapmayı destekler. JQuery Mobile farklı bir versiyonudur.
02.01.06. Niye React Native
O kadar farklı web geliştirme ortamını tanıttık ki (bunlar sadece bir kısmı) niye React Native sorusu aklınıza gelmiştir. Öncelikle her kişi kendi geliştirme yaptığı ortamı sevebilir, ancak ben bir Bilgisayar Mühendisliği Öğretim Üyesi olarak tüm kod geliştirme ortamlarını seviyorum. Öğrenmeye çalıştığım her dilde ve ortamda farklı ve güzel özellikler ile karşılaşıyorum. React Native seçmemim temel sebepleri:
- Var olan bir projenin devamı olması, (React)
- Birçok geliştiricisi olması ve açık kaynak kodlu olması,
- Javascript olması (Javascript büyük atakta, Node.js ile birlikte bu atak daha da hızlandı.)
- Stanford Üniversitesi Bilgisayar Bilimlerinde ders olarak seçilmesi (Hem android hem de swift dersleri de var, üçünden birini seçiyorsunuz, yani cross-platform için seçilmiş ortam React Native)
Umarım, büyük uğraşlar ile hazırladığım bu dersin geleceği olur. Burası Bilgisayar Bilimleri dünyası 2 sene sonra değil, 3 ay sonra ne olacağını bilemediğimiz bir dünyadayız. Tarihte hiçbir bilim bu kadar hızlı gelişmemiştir. (Bu ayrı bir yazı konusu olabilir 🙂