Xamarin Formları, MVVMCross ve SkiaSharp: Platformlar Arası Uygulama Geliştirmenin Kutsal Üçlemesi
Yayınlanan: 2022-03-11Yüksek beklentiler belirlemekten bahsedin. Kutsal üçlü, daha az değil!
Gerçek şu ki, birden fazla platformu hedeflediğinizde mobil uygulama geliştirme maliyetlidir çünkü paylaşılan bir kod yoktur. Apple, Objective-C veya Swift'de kodlamanızı gerektirir, Android, Java'da kodlamanızı gerektirir ve WinPhone, genellikle C# olmak üzere .NET'te geliştirmenizi gerektirir. Buna ek olarak, her platformun haritaları, çizimleri, resimleri veya GPS'i işlemek için sağladığı çok sayıda kitaplık vardır; tek bir mobil uygulama oluşturmak için çok fazla zaman ve bilgi gerekir.
Söylemeye gerek yok, çoğu yeni başlayanlar masraflarını üç katına çıkarmayı göze alamaz ve yerleşik işletmeler bile mobil alana giriş fiyatını haklı çıkarmakta zorlanabilirler.
Bu makalede, MVVMCross ve SkiaSharp ile birlikte Xamarin Forms'un aşinalık, performans ve benzersizlikten ödün vermeden platformlar arası mobil uygulamalar oluşturmanın uygun bir yolu olabileceğini öğreneceksiniz. Makale, bu üç teknolojiyi ve birden çok mobil platformda maksimum kodun yeniden kullanımına izin vererek geliştirme maliyetlerini nasıl azaltabileceklerini inceleyecektir.
Önemli Bir Sorun
Platformlar arası mobil uygulama geliştirme konusu gerçektir ve bu nedenle, platformlar arasında kod paylaşarak geliştirme maliyetlerini azaltmak için yıllar içinde birçok farklı çözüm ortaya çıkmıştır. Örneğin, video oyunu endüstrisinde, tüm büyük oyun motorları, Unreal ve Unity'nin cep telefonlarını ve tabletlerini hedef aldığı bile platformlar arası bir çözüm sunar.
Uygulama cephesinde, yıllar boyunca bu platformlar arası pazara liderlik etmek için birçok girişimde bulunuldu. Birçoğu yetersiz kaldı ve uçurumda kayboldu, ancak birkaçı yıllar sonra hala hayatta kaldı. Bunların arasında, üç mobil platformun tümü için destek sunan tek .NET çözümü olan Xamarin de bulunuyor.
Yerli veya Değil, İşte Geliyorum
Yani farklı çözümler arasında devam eden bir savaş var ve savaşın propaganda demek olduğunu kim söylüyor!
Savaş çoğunlukla büyük N cephesinde yapılır: yerli olmak! Bu kelimeye karşı dikkatli olmalısınız çünkü net bir anlamı yoktur. Bugünlerde mobil geliştirme dünyasında en çok kullanılan kelime ve çok moda. Gerçek şu ki, hiç kimse bunun gerçekte ne anlama geldiği konusunda hemfikir değil.
Platformlar arası bir çerçeve seçerken, tüm "yerel" seçenekler eşit değildir, bu nedenle elmaları portakallarla karşılaştırıyor olabilirsiniz. Bazıları için bu programlama diliyle ilgili, diğerleri için donanım özelliklerini kullanabilmekle ilgili, diğerleri bunun platform API'lerinin/UI'nin kullanımıyla ilgili olduğunu düşünüyor ve çoğu zaman sadece bir web uygulaması olmamakla ilgili.
Tartışmanın her tarafında tartışmalar var ve daha derine inmeyeceğim çünkü faydasız. Neden işe yaramaz? Pekala, size yutması zor bir gerçeği söyleyeyim: son kullanıcılarınız umursamıyor!
Evet, doğru okudunuz, sadece programcılarınız umursar. Son kullanıcınız, altta yatan teknoloji nedeniyle uygulamanızı asla seçmeyecek: uygulamanızı, sorunlarına yanıt verdiği ve iyi bir deneyim sunduğu için seçecektir.
O halde, bir kelimenin anlamı üzerinde kavga etmek yerine, Xamarin'in kullanıcılarınıza umursadıkları şeyi vermenin verimli bir yolunu nasıl sağladığına bakalım.
Baba, Oğul ve Kutsal Ruh
Devam etmeden önce, platformlar arası geliştirme sorununa çözümümüzü oluşturan üç unsuru açıklığa kavuşturalım.
Baba: Xamarin
Daha önce de belirtildiği gibi, Xamarin, mobil ve masaüstü uygulama geliştirme için bir .NET çözümüdür. 2016 yılında Microsoft tarafından satın alındı, ancak Mono projesi ile yaklaşık dört yıl öncesine tarihlendi. Günümüzde üç çözüm sunuyor: Xamarin.iOS, Xamarin.Android ve Xamarin.Mac. Diğer platformlar, Microsoft çözümleri olarak varsayılan olarak .NET uygulamalarını zaten kullanır. Kısacası Xamarin, .NET'teki platform API'lerine doğrudan bir bağlantı sunar. Bu nedenle, bir .NET uygulamasının yerel özelliklerini kullanabilirsiniz. Ayrıca, kullanıcı arayüzü için bir soyutlama katmanı sağlayan Forms adlı Xamarin için bir uzantı modülü vardır.
Oğul: SkiaSharp
SkiaSharp, Google'ın Skia vektör grafik kitaplığı üzerinde bir .NET sarmalayıcıdır. Skia, Android, Chrome, ChromeOS ve Firefox'un yerel işleme motorudur. SkiaSharp ile çapraz platform yapmak için .NET uygulamanızdaki kitaplığı kullanabilirsiniz. Bu, tasarımcınızın “uygulamanızı çok daha iyi hale getirecek” dediği düzgün gölgenin her hedef platform için tekrarlanmak yerine yalnızca bir kez kodlanabileceği anlamına gelir. Şahsen, bence en iyi özelliği, SVG grafiklerini, net, piksel mükemmelliğinde bir işlemeyi korurken, çeşitli form faktörlerinin tekrarlanmasını önlemenize olanak tanıyan bir şekilde oluşturma yeteneğidir.
Kutsal Ruh: MVVMCross
Her şeyi ayrı ve gevşek bir şekilde birleştirmek için kutsal çözümümüz MVVMCross'a güvenecektir. Bu çerçeve, her şeyin bağımsız tutulabilmesi için bir MVVM (Model-View-ViewModel) altyapısı uygular. Fazla teknik olmadan, uygulamalar genellikle üç bölüme ayrılır:
- Model: Verilerimizin bir bellek temsili
- Görünüm: Verileri ve eylemleri kullanıcılara sunan kullanıcı arayüzümüz
- ViewModel: Modelimizi Görünümümüze bağlayan katman ve bunun tersi de geçerlidir.
Yazılım mühendisliğinde, görsel temsili değiştirsek bile uygulama mantığının (ViewModel'de) yeniden kullanılabilmesi için görünümü her zaman ViewModel'den ayrı tutmaya çalışıyoruz. MVVMCross, veri bağlamalarını işleyerek ve platform soyutlaması için kalıplar ve araçlar sağlayarak tam da bunu başarmamıza yardımcı oluyor.
Son Kullanıcıların Önemsediği Şeyler
Özetlemek gerekirse, başarılı uygulamaları kötü olanlardan ayıran farklı şeyler vardır. Başarılı bir uygulama:
- Gerçek bir hayat problemini çözer
- keyifli bir deneyim sunar
1 numaralı noktanın, seçtiğiniz çerçeve ile açıkça hiçbir ilgisi yoktur. O halde 2 numaralı noktaya odaklanalım. Uygulamanızın keyfine katkıda bulunan üç ana unsur vardır:
- Aşinalık
- Verim
- benzersizlik
Aşinalık
Aşinalık, kullanım kolaylığı ve uygulamada hızla yolunuzu bulma ile ilgilidir.
Başka bir deyişle, platformun farklı kullanıcı arabirimi paradigmalarını sistem genelinde tutarlı bir şekilde kullanmakla ilgilidir. Örneğin, düğme konumları, bağlam eylemlerini listeleme veya gezinme gibi basit şeylerin tümü, uygulamanızın tanıdık olmasına katkıda bulunur.
Aşinalık, bir web arayüzüne dayalı web uygulamalarının veya çerçevelerinin ana zayıf noktasıdır. Öte yandan Xamarin Forms, satıcı tarafından sağlanan UI öğelerine platformlar arası eşlemeler sağlar.
Bu nedenle kullanıcılarınız, uygulamanızda sezgisel olarak rahat hissetmeleri için platformun genel görünümüne ve hissine uyan bir deneyim elde eder.
Verim
Açıkçası, pazarlama propagandanızda “yerli”den bahsetmek hiçbir şey ifade etmez. Jasonette'i “HTTP üzerinden yerel” bir örnek olarak alın. Kullanıcı arayüzü bir web sunucusunda depolanır… merhaba gidiş dönüşler ve yavaşlamalar, bu nedenle yerelin daha iyi performans anlamına gelmediğini görüyoruz!
Bu efsane ortadan kalktığında, gerçek hayattaki kıyaslamalara bakıldığında, Xamarin performans açısından en kapsamlı çözüm olarak ortaya çıkıyor. Önemli ölçüde daha fazla bağlam anahtarı gerektirmeyen Xamarin Forms, yerel dil uygulamalarıyla karşılaştırılabilir performans sunar.

Benim sonucum, uygulamanızı yavaşlatabilecek şeyin Xamarin'e kıyasla ana dilden ziyade uygulama seçimleriniz olduğudur. Diğer seçenekler performans açısından açık bir dezavantaja sahiptir.
benzersizlik
Mümkün olan en iyi kullanıcı deneyimini sağlamak ve uygulamanızı farklı kılmak isteyip istemediğinizi, tasarımcılarınızın benzersiz görünümlü bir uygulama oluşturma olasılığı da çok önemlidir.
Çoğu zaman, benzersizlik, özel görünümlü kontroller, animasyonlar veya hareketler oluşturma anlamına gelir. Xamarin'de hazır olmadığında, SkiaSharp'ı (Google'ın Skia vektör grafik oluşturma kitaplığının etrafındaki bir sarmalayıcı) kullanabilir ve donanıma gerektiği kadar yaklaşmak için Xamarin Forms'un özel oluşturucu konseptinden yararlanarak her zaman tek bir dosyada kodlama yapabilirsiniz. dil, diğer çözümlerin sunamadığı bir şey.
Bir İş Olarak Neye Önem Verirsiniz
Bu noktada, büyük olasılıkla çerçeve seçiminin de bir iş kararı olduğunu düşünüyorsunuz. İnsan kaynaklarının mevcudiyeti gibi bu makalenin kapsamı dışındaki faktörlerin yanı sıra, Xamarin'in özellikle MVVMCross ile birleştiğinde sunabileceği çok şey vardır. Kararınızda dikkate almak isteyeceğiniz dört hususu detaylandıracağım:
- Fiyat ve geliştirme maliyetleri
- Kodun yeniden kullanımı
- Bileşen kullanılabilirliği
- Destek ve topluluk
Fiyat ve Geliştirme Maliyetleri
Bunu aradan çıkaralım. Bu yılın başlarından bu yana, Xamarin serbest çalışanlar ve yeni başlayanlar gibi küçük işletmeler için ücretsizdir (Visual Studio Community Edition ile). Daha büyük kuruluşlar için, zaten sahip olabileceğiniz bir Visual Studio lisansıyla birlikte « ücretsiz » olarak gelir. Xamarin Forms, MVVMCross ve SkiaSharp da tamamen ücretsiz ve açık kaynaklıdır!
Daha önce de belirttiğim gibi, Xamarin ile .Net yoluna gitmek, uygulamalarınızı baştan sona tek bir dilde geliştirmenize olanak tanır. Diğer çözümlerin çoğu, programcılarınızın farklı dilleri bilmesini gerektirir. Örneğin Cordova söz konusu olduğunda, yalnızca HTML, Javascript, CSS'de değil, aynı zamanda mevcut bir eklentiye sahip olmayan satıcı API'lerine erişmeniz gerekiyorsa, muhtemelen Objective-C, Java ve/veya C#'da da akıcı olmanız gerekir. .
Kullanılan dillerin çeşitliliği, daha fazla bağlam anahtarı ve ustalaşmak için daha fazla araç sağlayarak verimliliğin düşmesine neden olur. Öte yandan Xamarin, hepsi bir arada bir çözümdür: Visual Studio'dan tüm platformlarda derler, dağıtır ve hata ayıklarsınız.
Doğrudan Xamarin ile ilgili olmasa da, .Net çözümünü seçerek C#'da geliştirmeyi hızlandıran birçok özelliğe de sahip olursunuz. Yani, C# 4.5+ sürümündeki zaman uyumsuz/beklemeli kolay çoklu iş parçacığı oluşturma, kapatma ve yansıtma gibi harika özelliklerden yararlanırsınız ve bunların hepsinin verimliliği artırdığı gösterilmiştir.
Kodun Yeniden Kullanımı
Muhtemelen kodun yeniden kullanımını düşündünüz ve büyük olasılıkla tüm çözümlerin bu konuda bir şekilde eşdeğer olduğunu düşünüyorsunuz. Dostum dediğim için üzgünüm ama yanılıyorsun!
Aranızdaki programcılar, Formlar'da yerleşik olan MVVM katmanı üzerinde neden MVVMCross kullanımını önerdiğimi merak etmiş olabilir. Peki, burada dikkate alınması gereken bir şey var: Gerçekten sadece mobil uygulamalar mı geliştiriyorsunuz?
Uygulama mantığınızı MVVMCross ile yalıtarak ve sağladığı kontrolün tersine çevrilmesini kullanarak, maksimum miktarda kodu mobilde, ayrıca Windows ve Mac'te yeniden kullanabilirsiniz (çünkü Xamarin.Mac sizin arkadaşınızdır).
Sadece tasarruf etmenizi sağlamakla kalmaz, aynı zamanda kod bakım maliyetlerinizi düşürecek iyi mühendislik uygulamalarını da ortaya koyar.
Bileşen Kullanılabilirliği
Belki benim gibi değilsin ama tekerleği yeniden icat etmekten nefret ediyorum. Bu nedenle, uygulamanıza kolayca entegre edebileceğiniz mevcut bileşenlere erişime sahip olmak, pazara sunma sürenizi hızlandırmak için çok önemlidir ve çoğu zaman aynı zamanda maliyetlerinizi de düşürür.
Xamarin ve MVVMCross'u seçmek, size mevcut bileşenleri seçebileceğiniz iki seçenek sunar. İlk olarak, Formlu veya Formsuz Xamarin için giderek daha fazla bileşen kullanılabilir. Xamarin, yaygın uygulama sorunlarına çeşitli çözümler bulabileceğiniz ve diğer şirketlerin doğrudan satış yaptığı Visual Studio'nun içine entegre edilmiş bir Bileşen Deposuna sahiptir, bu nedenle kendi bileşenlerinizi yazmaya başlamadan önce arama yaptığınızdan emin olun (veya bunları oluşturulduktan sonra satmayı düşünün).
İkincisi, Nuget paketlerini aramak isteyeceksiniz, çünkü birileri ihtiyacınız olanı yapmak için zaten kod yazmış olabilir. Bu paketler arasında, e-posta, GPS veya yerelleştirme gibi yaygın sorunları çözecek platformlar arası MVVMCross eklentilerinin iyi bir listesini bulacaksınız.
Zaten C# konusunda deneyimliyseniz, muhtemelen tercih ettiğiniz bileşenlere sahipsiniz. Elbette onları bırakmak istemezsiniz, kendilerini çok rahat hissederler. İçiniz rahat olsun, mevcut bileşenler için C# bağlamaları oluşturabilir ve bunları özel oluşturuculardan biraz yardım alarak Formlar'da bile Xamarin ile birlikte paketlenmişmişiz gibi kullanabilirsiniz.
Bunlardan bahsetmişken, kendinizinkini oluşturmadan önce Xamarin bağlamaları Github deposuna bir göz atmak isteyebilirsiniz.
Destek ve Topluluk
Son olarak, desteğe ve örneklere erişim, bir çerçeve seçiminde çok önemli bir faktördür. Xamarin bir süredir buralarda, bu nedenle topluluk bugün oldukça iyi bir boyutta.
Google'da bilgi aramak genellikle çok sayıda yanıt verir (ipucu: Xamarin'in ataları olan monotouch ve monodroid için aramalarınızı da deneyin) ve Xamarin web sitelerinde birçok örnek ve harika belgeler sunar.
Ayrıca, Xamarin gerçekten satıcı API'leri üzerinde bir bağlayıcı olduğundan, Apple ve Google'ın belgeleri her zaman alakalıdır ve sorularınızın çoğuna cevap verecektir. Ardından, paylaşılan kodunuzdaki satıcı API'lerini soyutlamak için kendi MVVMCross hizmetinizi oluşturabilirsiniz.
Geçen Mart ayında Microsoft tarafından satın alınan Xamarin'in geleceğine gelince, bahse girerim ileriye gitmek dışında hiçbir yere gitmeyecektir. Bu satıştan ve eşleştirmenin ücretsiz bir modele geçişinden bu yana, topluluk yalnızca büyüdü, destek arttı ve ürün muhtemelen daha hızlı bir şekilde gelişmeye devam etti!
Xamarin için gelecek parlak görünüyor.
Rumble'a Hazırlanalım!
Bu makaleyle bir kutu solucan açabileceğimin farkındayım. Şimdi beni yanlış anlamayın, göz önünde bulundurmaya değer başka seçenekler de var ve sizi buna davet ediyorum, çünkü benim endişelerim sizinkiyle aynı olmayabilir.
Altı haftalık bir zaman çizelgeniz varsa ve dört ay sonra hala hazır bir uygulamanız yoksa, kazanmadığınızı unutmayın. Bu, kurum içinde birini eğitmek ya da bilgili birini işe almak için iki buçuk ay ve çok para bırakırdı. Bu noktada “yerel” bir uygulama oluşturmakta ısrar etmek, projenizin kaderi için oldukça zararlı olabilir.
Xamarin ve bu yardımcı teknolojiler, kullanıcılarınızın tam olarak neye önem verdiğini ve neye ihtiyacınız olduğunu sağlar. Umarım bu makale, bir sonraki mobil uygulamanız için seçebileceğiniz çerçeve hakkında bilinçli bir karar vermenize yardımcı olur.