Xamarin.Forms Her Derde Deva mı?

Xamarin

Xamarin ile sadece Android, IOS ve Windows Phone uygulamaları geliştirebilirken Cross-Platform seçerek bu üç platformu hedef alarak uygulamalar da geliştirildiğini biliniyoruz. Peki Cross-Platform çalışmanın ne gibi artı veya eksi yönleri oluyor veya bunun dışında gerçekten Cross-Platform, cihazda istediğimiz durumu bize sağlıyor mu? Bu soruları cevaplayacağız o yüzden en baştan başlayalım.

Platform Özgünlüğü

Uygulamanız için mutlaka bir UI ile çalışmışsınızdır. Tüm mobil geliştirmeler de veya destkop geliştirmeler de UI vardır. UI için doğal olarak görünümler (view) eklersiniz. Cross-platform bir UI’da çalışmadıysanız her view’ün kendine göre bir ismi vardır; mesela textbox, listbox, JList, JScrollPane, ProgressBar, Button (ilk iki view ismi C# Windows Form’dan, ortadaki ikili Java GUI’den, son ikili ise Android Studio’dan alınmıştır). Java da Cross-Platform’dur; bir kere yaz her yerde çalışsın. Fakat Xamarin.Forms ile view yönünden farkları vardır. Buda şimdi ki bahsedeceğim fark için bir örnektir. Java GUI tasarlarken view ismi asla değişmez; JList view ismi Windows’ta da, MacOS’ta da Linux’ta da aynıdır, ama Xamarin.Forms’da  view’lerin hepsi platforma göre isim alır. Bunu en çok XAML ile tasarlarsanız OnPlatform elementi içinde görürsünüz. Bunun nedeni mobil platformlardan kaynaklanıyor. Android, IOS, Windows Phone hepsi kendine göre isimlerle çalışıyorlar. Slider mesela; iPhone’daki bir UISlider’a, Android’de bir SeekBar’a ve Windows Phone’da bir Slider’a eşit gelir. Bu platforma özel kütüphanelerin oluşturucularından dolayıdır. Ama merak etmeyin, bir Slider’ı XAML’da kolay kolay göremezsiniz çünkü büyük ihtimal bu Slider bir Handlers’a sahip olacaktır.

İkinci olarak bu daha çok bir kolaylıktır. Device sınıfı için farklı gözüken kodlar yazabilirsiniz. Yani bir label’ınız var veya slider üstünden devam edelim; bu slider’ın Android’te üstte, IOS’da altta, Windows Phone’da da ortada olmasını isterseniz çok kolay bir metot ile bunu ayarlayabiliyorsunuz. Daha bunun gibi bir sürü özellik var, sadece yerleştirme olarak düşünmeyin. Bir örneği bu blog yazımda var.

Label, Button, Switch, ve Slider gibi standart Xamarin.Forms görsel nesnelerinin her biri, çeşitli Xamarin.Forms.Platform kitaplıklarındaki bir oluşturucu sınıfı tarafından desteklenir. Her oluşturucu sınıfı, Xamarin.Forms nesnesine eşleşen platforma özgü nesneyi uygular. Kendi özel oluşturucularıyla kendi özel görsel nesnelerinizi oluşturabilirsiniz.

Bazı uygulamalarda daha derin platform özelliklerine ihtiyaç duyulabilir. Örneğin, uygulamanızın kullanıcının telefonunun GPS koordinatlarını gerektirdiğini varsayalım. Bu, Xamarin.Forms’un sağladığı bir şey değildir, bu nedenle bu bilgileri elde etmek için her bir platforma özel kendi kodunuzu yazmanız gerekir.

DependencyService sınıfı bunu yapılandırılmış bir biçimde yapmak için bir yol sağlar. Bir arayüzü, ihtiyacınız olan metotlarla tanımlarsanız (örneğin, IGetCurrentLocation) ve bu arayüzü her platform projesinde bir sınıfla gerçekleştirirsiniz. Ardından, bu arayüzdeki yöntemleri Xamarin.Forms projesinden hemen hemen API’nin bir parçası gibi çağırabilirsiniz.

Xamarin.Forms, platformdan bağımsız olmanıza veya olması gerektiği gibi platforma özgü olmanıza izin verir. Xamarin.Forms, Xamarin.iOS ve Xamarin.Android’in yerini almaz; aksine, onlarla bütünleşir.

Cross-platform her derde deva mı?

Xamarin.Forms’un platformdan bağımsız uygulamalar oluşturmada sağladığı çok büyük yardıma rağmen Native API programlamanın yerine geçemez. Uygulamanız, belirli denetim türleri gibi doğal API özelliklerine dayanıyorsa, Xamarin.iOS, Xamarin.Android ve Native Windows Phone API’si ile yapmak isteyebilirsiniz.

Previous
Xamarin Forms ContentPage – Bölüm 12
Next
Xamarin.Forms Bölüm 13 – Text üzerinde Device.OnPlatform

Leave a comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir