Skip to content

.Net Standard ile Xamarin Uygulamaları Geliştirmek

.Net Standard ile Xamarin Uygulamaları Geliştirmek

.Net Standard Nedir?

En temelde .Net Standardın çözdüğü problem; platformlar arası kod paylaşımını artırmak ve geliştirilen API’ lerin diğer platformlar tarafından da kullanılabilmesini sağlamaktır. Diğer platformlardan kasıt, Asp.Net web uygulamaları, mobil ve masaüstü uygulamalar ve hatta oyunlar.

Öyle ki tek bir base classınız olacak ve bu, tüm .Net platformlarında çalışabilir olacak. Geliştiriciler açısından, geliştirme yaparken ayrıca her platform için farklı bir senaryo düşünmek gerekmeyecek. Mevcut .Net APIlerini buradan görüntüleyebilirsiniz.

.Net Standard Platform desteği ile ilgili detaylı tablo aşağıdaki gibidir. Bu tabloya bakarak mevcut Xamarin projelerinin hangi .Net Standardına yükseltebileceğini görebilirsiniz. Mevcut Xamarin projelerini Visual Studio üzerinden .Net Standarda taşımanızı önermiyoruz. Deneyimle sabittir, bu pek çok hata ile karşılaşmanıza ve epeyce vakit kaybı yaşamanıza sebep olacaktır. Üşenmeyin yeni bir proje oluşturun 🙂

.Net Standard’ ın .Net Core’ dan farkı nedir?

.Net Core’ dan portable olma yapısı çıkarılarak, .Net Standard’ ın diğer .Net platformlarından bağımsız olarak geliştirilebilmesi amaçlanmış. Bu durum .Net core’ un kendi içinde geliştirilmesini hızlandırmış ve .Net Standard tarafında da mevcut tasarımlar üzerine oturtmak için yeni bir tasarım yapmak yerine, doğrudan ilgili katman basitçe değiştirilmiş. .Net Core’ da yeni bir API eklenmesi bunun .Net Standard tarafında da çalışacağı anlamına gelmiyor. Ancak .Net Standard ile temel amaç .Net platformları arasında bir tutarlılık oluşturmak. Bu nedenle, standart güncellendiğinde standartların bir parçası olan yeni üyeler otomatik olarak değerlendiriliyor.

.Net Standard’ ın PCL’ den Farkı Nedir, Avantajları nelerdir?

PCL’lerle, üzerinde çalışmak istediğiniz platformları seçersiniz ve size kullanabileceğiniz sonuçtaki API setini sunar. Bu sayede, birden fazla platform üzerinde çalışan ikili üretmenize yardımcı olurken, hala farklı temel sınıf kütüphaneleri hakkında düşünmeye zorlar. .Net Standard ile tek bir temel sınıf kütüphanesine sahipsiniz. İçindeki her şey tüm .NET platformlarında desteklenecektir (mevcut olanlar ve gelecekteki olanlar).

Xamarin .Net Standard ile Uyumlu mu, .Net Standard’ a geçiş Yapmalı mıyız?

Şimdiden Nuget paketlerinden en çok kullanılan API’ ların %70′ inin .Net Standard 2.0′ a geçiş yaptığı ve bazı PCL kütühanelerinin de .Net Standard ile uyumlu olduğu söyleniyor (tamamen uyumlu olmayabilir. Dipnotlar ile değineceğiz). Ancak yine de çalışmayı planladığımız .Net Standard sürümünü, gereksinimlerimize göre tercih etmekte yarar var.

.Net Standard sürümü seçilirken dikkat edilmesi gerekenler;

  • En son sürüm, daha fazla API desteği
  • En düşük sürüm, daha fazla platform desteği, gibi.

Eğer sadece Android ve iOS projeleri ile çalışacaksak .Net Standard 2.0 iyi bir seçenek olabilir. Ancak Windows Universal projeleri ile de çalışacaksak, daha düşük bir .Net Standard sürümünü tercih etmemiz platform desteği açısından daha gerçekçi bir yaklaşım olur.

Bunun ile birlikte aşağıdaki satırları projemizin csproj dosyasına ekleyerek yaygın olarak kullanılan ancak henüz .Net Standard a geçiş yapmamış kütüphaneleri kullanabiliriz.

https://gist.github.com/HilalSener/d846a7c9c18877b7b2d87513668a8e8c

Bilmekte Fayda Var!

.Net Standard doğrusal versiyonlandığı için bir kütüphane üst sürüme güncellense bile alt sürüm özelliklerini de taşımaya devam ediyor. Örneğin, projede bir tasarım kütüphanesi kullanıyoruz. Ancak kütüphane, bizim projede kullandığımız bir elemanı üst versiyonunda kaldırmış. Bu durum, problemler yaşamamıza sebep olabiliyordu.

Bazı Nuget paketlerini eklediğimiz sırada dll okuyamama hatası alabiliyoruz. Daha fazla platform uyumluluğu vaad ettiği için projeyi bir alt sürüme çeksek bile bu problem devam edebiliyor. Böyle bir durumda Visual Studio’ yu güncelleyip Xamarin’ i son sürüme çekmenizi öneririz. Bununla birlikte .Net Standardın son sürümünü kullanmanın, Android ve iOS tarafında uyumlu çalışmak ile birlikte, Universal uygulama geliştirirken bazı sorunlara sebep olabileceği söyleniyor. Henüz karşılaşmadık. Olası bir durumda yazının bu kısmı günlleniyor olacak.

Olası hataları çözümlemek için clean, build, update, restart yaptınız. Ama bir de baktınız ki intellisense gitmiş. Resharper’ ı kaldırınca sorunun düzeldiğini göreceksiniz. Visual Studio’ nun kendi intellisense’ i şu an iyi çalışır durumda.

Bazı PCL kütüphanelerinin .Net Standard ile çalıştığından bahsettik. Evet çalışabiliyor. Ama Nuget paketleri kısmını inceleyecek olursanız, uyarı verdiğini göreceksiniz. Kütüphanenin o an kullandığınız elemanı, bazı platformlarda çalışıyor olabilir. Ancak aynı kütüphanenin farklı bir elemanını kullanmak istediğinizde çalışmaması olası. Mümkün olduğunca böyle bir durumdan kaçınmak faydalı olacaktır.

Happy Coding 🙂