Xamarin <> React Native <> Ionic

Davut
iOS.development.turkey
7 min readJul 18, 2017

Hybrid mobil uygulama geliştirme framework’leri Native’i geçiyor mu?

Bir önceki yazımın devamı olarak bu yazımda hybrid konusunda native’i yakalama derecesine gelmiş bazı konularda ise daha iyi araçlar sunan 3 framework’e değineceğim.

İlk olarak Microsoft’un satın aldığı Xamarin’le başlayalım

Xamarin

Xamarin, farklı mobil platformlar için Native uygulama geliştirmek isteyenlere cross-platform çözüm sunan bir platformdur. Xamarin sayesinde Visual Studio ve C# dilini kullanarak Android, iOS ve Windows Phone uygulamaları geliştirebilirsiniz.

Xamarin ile üretilen çıktının, Android Studio’da Java ile geliştirilen ya da Xcode’da objective-C/swift ile geliştirilen uygulamalardan farkı yoktur. Bu özelliğiyle Xamarin Platofrmu %100 Native çıktı üreten tek cross-platform geliştirme aracıdır. — Xamarin

Bu açıklama xamarintr.com’dan alınmıştır

Evet, belki de artık hybrid değil de native diyebileceğimiz bir framework. (tabi native çıktı üretiyor olsa da platform’un tüm kütüphanelerine erişim olmadığı için tam olarak native diyemeyiz).

Xamarin C# dilini iyi bilenler için idealdir. Uygulamanızı C# developer’lerinin kullandığı Visual Studio ile geliştirebilirsiniz. Eskiden sadece Windows’ta kullanabiliyor olsanızda artık Mac’ler için de Visual Studio mevcuttur.

Özellikleri

Xamarin’de uygulama geliştirirken iki nokta dikkatinizi çekecektir. Biri Xamarin.iOS ve Xamarin.Android diğeri ise Xamarin.forms peki bunlar nedir?

Xamarin.iOS ve Xamarin.Android

Bunlar cross-platform(çapraz platform) uygulama geliştirirken tasarımını ayrı ayrı yapmanız için yardımcı olacaktır. Böylelikle ne iOS’un kendine özel tasarımından ne de Android’in kendine özel tasarımından uzaklaşmış olursunuz. Özellikle daha önce native uygulama geliştirenler için daha yakın gelecektir çünkü componentlere verilen isimler native ile aynıdır.

Xamarin.forms

Bu ise farklı platformların kendine özel tasarımlarından ziyade ortak bir yol izlemek için kullanılır. Kod bir kere yazılır ve bütün platformlarda çalıştırılabilir.

Uygulama geliştirirken bir sayfa için Xamarin.forms kullanırken diğer sayfa için Xamarin.iOS ve Xamarin.Android kullanılabilir.

Dezavantaj

Uygulamanızı iOS’un simulator’unda test etmek isterseniz Mac’ınız olması ve Xcode kurulu olması gerekir, Android için de makinenize Android Studio kurulu olması gerekir. Mac kullanıyor iseniz geliştirdiğiniz uygulamayı Windows Phone’da test etmek için Sanal Makine de Windows kurmanız ve Visual Studio kurmanız yeterli olacaktır. apk ya da ipa almak için de bunlar gereklidir. Xamarin ile geliştirdiğiniz uygulama native uygulamadan daha fazla yer kaplar. Pod kullanırken bir takım sıkıntılarla karşılaşma olasığınız yüksektir. Mobil işletim sisteminin yeni sürümü çıktığında Xamarin’in yeni sürüme göre güncellenmesi gerekebilir.

Uygulamaları için Xamarin kullanan şirketler

React Native

React Native ile bir “mobil web uygulaması”, “HTML5 uygulaması” veya “Hybrid uygulama” oluşturmazsınız. Objective-C veya Java kullanılarak oluşturulan bir uygulamadan ayırt edilemez gerçek bir mobil uygulama oluşturursunuz. React Native, normal iOS ve Android uygulamaları ile aynı temel UI oluşturma bloklarını JavaScript ve React’i kullanarak bu yapı taşlarını bir araya getiriyor. — React Native

Bu açıklama React Native’in github sayfasından alınmıştır

Evet gördüğünüz gibi cross-platform üreten tek Xamarin değilmiş.

React Native — facebook’a ait olan bu framework, daha önce facebook’un html5 ve javascript ile başlamış olduğu hybrid mobil uygulama geliştirme yolunun devamı diyebiliriz. Facebook daha önce hybrid mobil uygulama geliştirme yoluna girmiş ancak telefonlarda çok yavaş kalması nedeniyle kullanıcılardan tepki toplamıştı. Sonradan bunun yanlış olduğunu kabul eden facebook 2015 yılında React Native’i duyurdu.

İlk önce iOS desteği ile geldi daha sonra Android daha sonra ise Windows Phone eklendi. Facebook, Ads manager isimli uygulamasını geliştirmek için React Native’i kullanıyor.

Şu anda sadece 3 (iOS, Android, Windows Phone) platforma uygulama geliştirilebilirken React Native’in açık kaynak olması nedeniyle daha sonra bir çok platformun ekleneceğini öngörebiliriz.

Özellikleri

Native uygulama geliştiricilerin sıkıntısı olan deployment time(uygulamanın test cihazında açılma süresi) native uygulama geliştirirken 10–20 saniye arasıdır. Özellikle yazdığınız kodda hatanızı bulmaya çalışırken bu 10–20 saniyelik zaman can sıkıntısı olabiliyor.

Deployment time

React Native’de deployment time 1–3 saniye arasıdır.

Uygulamayı güncelleme

Mesela bir uygulamanız olduğunu düşünün şu anda store’da ama bir özellik eklemek istiyorsunuz bunun için projeye özellikleri eklersiniz önce bir testten geçirirsiniz tekrardan store’a yüklersiniz iOS içinse kontrolden geçmesini beklersiniz, android ise bir iki saat sonra uygulama yüklenmiş olur sonra kullanıcının store’dan güncelle butonuna basıp güncellemesini beklersiniz, peki ya uygulamanın kesinlikle güncellenmesi gerekiyor ise ve kullanıcı güncellememekte ısrar ediyor ise… Ne kadar uzun değil mi? işte bunun için React Native’de CodePush devreye giriyor.

CodePush

App store ya da play store’a yükleme yapmaya gerek kalmadan uygulamayı güncelleyebilmenizi sağlar. Ve yapılan güncellemenin kaç kişi tarafından kullanıldığını ve yüzdesini görebilmenizi sağlar. Bu güncellemeyi kullanıcın haberi olmadan yapabilirsiniz ya da bir alert ile güncelleme olduğunu haber vererek yapabilirsiniz. Önce debug’da test edip sonra da release için güncelleyebilirsiniz. Eğer bir hata olması durumunda bir önceki versiyona otomatik olarak geçer.

Hazır uygulamaya ekleme

React Native’e hazır bir uygulamaya eklenebilir (Uygulamayı yeniden yazmaya gerek yok). Mesela instagram bazı sayfalarını(ayarlar) react native ile yazmıştır. Ya da hazır bir React Native uygulamanıza native kodları ekleyebilirsniz.

Platforma özel componentler

Uygulamayı geliştirken platforma özel componentleri kullanabilirsiniz mesela tab bar (instagramda ekranın altında yer alan diğer sayfalara geçiş yaptığımız kısım) iOS’da altta yer alır iken android’te üstte yer alır. Bunun için tabiOS diyerek sadece iOS’da çalışacak şekilde kodlayabilirsiniz.

Dezavantaj

Uygulamanızı iOS’un simulator’unda test etmek isterseniz Mac’ınız olması ve Xcode kurulu olması gerekir, Android için de makinenize Android Studio kurulu olması gerekir. Mac kullanıyor iseniz geliştirdiğiniz uygulamayı Windows Phone’da test etmek için Sanal Makine de Windows kurmanız ve Visual Studio kurmanız yeterli olacaktır. Apk ya da ipa almak içinde bunlar gereklidir. İşletim sisteminin yeni sürümü çıktığında React Native’in yeni sürüme göre güncellenmesi gerekebilir.

React Native ile geliştirilen bazı uygulamalar

Bu uygulamaların tamamı React Native ile geliştirilip geliştirilmediği konusunda fikrim yoktur fakat bunların tamamının en az bir sayfasında React Native kullanılmıştır.

*Facebook Ads Manager — tamamı React Native ile yazılmıştır

Ionic

Hybrid ve Native uygulama geliştirme — yazımda açıkladığım hybrid uygulama geliştirme tanımı aslında bu framework ile tamı tamına uyuşur, o yazıda şöyle belirtmiştim:

HybridHTML5, CSS ve JavaScript kullanılarak yazılır. Tek kod ile bütün platformlara geliştirilebilir. Cross-platform(çapraz platform) uygulama geliştirme olarak da bilinir. Tüm platformlar için aynı sonuç üretilir ve tek kod ile native’e benzer bir uygulama geliştirilebilir.Bunun çalışma şekli şu şekilde, sizin yazdığınız uygulamayı platformda bir webViewde çalıştırıyor yani telefonda browser’ı(tarayıcıyı) full screen kullanıyormuş gibi düşünebilirsiniz tabi üstte link yazdığımız yer olmadan, geri ve ileri gitme butonları olmadan, browserden daha hızlıdır ve local API’lere ulaşabiliyorsunuz.

Xamarin ve React Native daha çok Native uygulama geliştirmeye doğru kayar iken Ionic tam Hybrid uygulama geliştirme framework’udur.

Aslında Apache Cordova uygulama geliştirme framework’unun üzerine kurulmuş olan ionic şu anda bize sunduğu güzel araçları ile en çok öne çıkan hybrid mobil uygulama geliştirme framework’lerinden biridir.

Özellikle mobil uygulama geliştirmek isteyen web developerlere çok yakın gelecektir.

Özellikleri

Uygulamanızı test ederken xcode ya da android studio’ya gerek kalmadan browserde bakabilirsiniz. Desteklediği tüm platformları browserde aynı anda görebilirsiniz. CodePush özelliği ionic’de de vardır.

Deployment time

React Native’deki gibi cihazda ya da simulatorda değilde browserde test ederseniz 1–3 saniye arasıdır. Eğer simulatorda test ederseniz native süresi (10–20 saniye) ile aynıdır.

Ionic View

Ionic View uygulaması ile yaptığınız uygulamayı başka arkadaşlarınıza da test ettirebilirsiniz. Hatta feedback’te alabilirsiniz.

Hazır template

Uygulamaya başlamadan size hazır template’ler verir onun üzerinde değişiklikler yaparak uygulamanızı geliştirebilirsiniz. Kendi tutorial’ını takip ederek en sonunda yaptığı tutorial’ın sonucunu da hazır template’ler arasında bulabilirsiniz.

Ionic Creator

İsterseniz CLI (Command-line Interface)ile isterseniz Ionic Creator ile uygulamanızı geliştirebilirsiniz. Ionic Creator’u browser üzerinde çalışan IDE gibi düşünebilirsiniz. Çok güzel araçları bulunuyor olsa da bunların bazı özellikleri pro versiyonunda olup ücretlidir.

Dashboard

Kendine özel dashboard’u mevcuttur. Burdan Push ile bildirim gönderebilir iken aynı zamanda kullanıcı oluşturmak için authentication özelliğini de uygulamanızda kullanabiliyorsunuz. Başka da bir çok özelliği olmakla beraber bazı özellikleri ücretlidir.

Dezavantaj

Performansı diğerlerine göre düşüktür(webView’de çalıştığı için ama bu sizin yaptığınız uygulamaya göre değişir). Apk ya da ipa almak için xcode(sadece Mac) ve android studio gereklidir. Önceki yazımda belirttiğim Neden Hybrid? başlığının altında ki dezavantajlar bunun için de geçerlidir.

Ionic ile geliştirilen bazı uygulamalar

Karşılaştırma

Peki hangisini kullanmalıyız?

Eğer telefonun performansını çok zorlamayacak (Örn: Haber uygulaması) bir uygulama yapacaksanız ionic size çok iyi gelir.

Eğer telefonu zorlayabilecek bir uygulama yapacaksanız ya da şu anda çok önemli olmayıp ama önü açık, gelecekte parlayabilecek bir uygulama geliştirmek istiyorsanız o zaman her zaman native yazmak daha iyidir(Burda native’den kastım React Native ya da Xamarin değildir, platformun native dilleri ve IDE’leri kullanılan native’dir). Çünkü native yazarken diğer framework’lerde karşılaşacağınız sorunlarla daha az karşılaşırsınız. Diğer framework’lerin kendilerini güncellememeleri sizin uygulamanızı bir anda çökertebilir ama native’de böyle birşey ile karşılaşmazsınız.

Eğer ki performansı zorlayacak bir uygulama yapacaksanız ve native ile de uğraşamayacaksanız, kısa zamanda uygulamayı elde etmek istiyorsanız veya şirket iseniz ve anroid developere ayrı, iOS developere ayrı para ödemek istemiyorsanız o zaman React Native ve Xamarin seçebilirsiniz. C#’ı iyi olan birisi Xamarin ile çok çabuk ilerler aynı şekilde Javascript’i iyi olan da React Native ile iyi yol alır.

Şunu belirtmek isterim ki Native her zaman en iyi seçenektir.

Yine de seçim sizin 🤓

Bu bir önceki yazımın devamıdır. Eğer Native ve Hybrid konularında bilginiz yok ise burdan önceki yazıma ulaşabilirsiniz

Vakit ayırarak okuduğunuz için teşekkürler. Bir yanlışım var ise veya bir bilgi vermek isterseniz yorum yapmaktan çekinmeyin.

şimdilik bu kadar bir daha ki blogda görüşmek üzere… 🤗

🙌🏻 👋🏻

--

--