Bölüm 1 – Xamarin Mobil Platformunu Anlama

Xamarin platformu, iOS ve Android için uygulama geliştirmenize olanak sağlayan birçok öğeden oluşur:

  • C# dili : Genel, LINQ ve Paralel Görev Kitaplığı gibi tanıdık söz dizimini ve karmaşık özellikleri kullanmanıza olanak tanır.
  • Mono .NET framework – Microsoft'un .NET framework'lerindeki kapsamlı özelliklerin platformlar arası bir uygulamasını sağlar.
  • Derleyici – Platforma bağlı olarak, yerel bir uygulama (örneğin, iOS) veya tümleşik bir .NET uygulaması ve çalışma zamanı (örneğin, Android) üretir. Derleyici ayrıca kullanılmayan kodu bağlama gibi mobil dağıtım için birçok iyileştirme gerçekleştirir.
  • IDE araçları : Mac ve Windows üzerinde Visual Studio, Xamarin projeleri oluşturmanıza, oluşturmanıza ve dağıtmanıza olanak tanır.

Ayrıca, .NET framework ile temel alınan dil C# olduğundan projeler, Windows Telefon'a da dağıtılabilir kodu paylaşacak şekilde yapılandırılabilir.

Kaputun Altında

Xamarin, C# dilinde uygulama yazmanıza ve aynı kodu birden çok platformda paylaşmanıza olanak tanısa da, her sistemdeki gerçek uygulama farklıdır.

Derleme

C# kaynağı, her platformda farklı yollarla yerel bir uygulamaya girer:

  • iOS – C# ARM derleme diline derlenmiş önceden (AOT) bir sürümdür. Uygulama boyutunu küçültmek için bağlama sırasında kullanılmayan sınıfların çıkarıldığı .NET çerçevesi dahil edilir. Apple, iOS üzerinde çalışma zamanı kodu oluşturulmasına izin vermez, bu nedenle bazı dil özellikleri kullanılamaz (bkz . Xamarin.iOS Sınırlamaları ).
  • Android – C# IL'de derlenmiş ve MonoVM + JIT'ing ile paketlenmiş. Bağlantı sırasında çerçevedeki kullanılmayan sınıflar çıkarılır. Uygulama Java/ART (Android çalışma zamanı) ile yan yana çalışır ve JNI aracılığıyla yerel türlerle etkileşim kurar (bkz . Xamarin.Android Sınırlamaları ).
  • Windows – C# IL'de derlenir ve yerleşik çalışma zamanı tarafından yürütülür ve Xamarin araçları gerektirmez. Xamarin'in yönergelerini izleyerek Windows uygulamaları tasarlamak, kodun iOS ve Android'de yeniden kullanılmasını kolaylaştırır. Evrensel Windows Platformu ayrıca Xamarin.iOS'un AOT derlemesine benzer şekilde davranan bir .NET Native seçeneği vardır.

Xamarin.iOS ve Xamarin.Android bağlayıcı belgeleri, derleme işleminin bu bölümü hakkında daha fazla bilgi sağlar.

'derleme' çalışma zamanı – ile System.Reflection.Emit dinamik olarak kod oluşturma – kaçınılmalıdır.

Apple'ın çekirdeği iOS cihazlarda dinamik kod oluşturmayı engeller, bu nedenle anında kod yayma işlemi Xamarin.iOS'ta çalışmaz. Benzer şekilde, Dinamik Dil Çalışma Zamanı özellikleri Xamarin araçlarıyla kullanılamaz.

Bazı yansıma özellikleri çalışır (örneğin, MonoTouch.Dialog bunu Düşünceler ion API'sinde kullanır), ancak kod oluşturma için kullanmaz.

Platform SDK Erişimi

Xamarin, platforma özgü SDK tarafından sağlanan özellikleri tanıdık C# söz dizimi ile kolayca erişilebilir hale getirir:

  • iOS – Xamarin.iOS, Apple'ın CocoaTouch SDK çerçevelerini C# ile başvurabileceğiniz ad alanları olarak kullanıma sunar. Örneğin, tüm kullanıcı arabirimi denetimlerini içeren UIKit çerçevesi basit using UIKit; bir deyimle eklenebilir.
  • Android – Xamarin.Android, Google'ın Android SDK'sını ad alanları olarak kullanıma sunar, böylece kullanıcı arabirimi denetimlerine erişmek gibi using Android.Views; bir using deyimiyle desteklenen SDK'nın herhangi bir bölümüne başvurabilirsiniz.
  • Windows – Windows uygulamaları, Windows üzerinde Visual Studio kullanılarak oluşturulur. Proje türleri Windows Forms, WPF, WinRT ve Evrensel Windows Platformu (UWP) içerir.

Geliştiriciler için Sorunsuz Tümleştirme

Xamarin'in güzelliği, arka planda farklara rağmen Xamarin.iOS ve Xamarin.Android (Microsoft'un Windows SDK'larıyla birlikte) üç platformda da yeniden kullanılabilecek C# kodu yazmak için sorunsuz bir deneyim sunmadır.

İş mantığı, veritabanı kullanımı, ağ erişimi ve diğer yaygın işlevler bir kez yazılabilir ve her platformda yeniden kullanılabilir ve yerel uygulamalar olarak görünen ve gerçekleştiren platforma özgü kullanıcı arabirimleri için bir temel sağlar.

Tümleşik Geliştirme Ortamı (IDE) Kullanılabilirliği

Xamarin geliştirmesi Mac veya Windows üzerinde Visual Studio'da yapılabilir. Seçtiğiniz IDE, hedeflemek istediğiniz platformlar tarafından belirlenir.

Windows uygulamaları yalnızca Windows üzerinde geliştirilebildiği için iOS, Android ve Windows için derlemek için Windows için Visual Studio gerekir. Ancak, Windows ve Mac bilgisayarlar arasında proje ve dosya paylaşmak mümkündür, bu nedenle iOS ve Android uygulamaları Mac üzerinde oluşturulabilir ve paylaşılan kod daha sonra bir Windows projesine eklenebilir.

Her platform için geliştirme gereksinimleri Gereksinim kılavuzunda daha ayrıntılı olarak ele alınmaktadır.

iOS

iOS uygulamaları geliştirmek için macOS çalıştıran bir Mac bilgisayar gerekir. Visual Studio'da Xamarin ile iOS uygulamaları yazmak ve dağıtmak için Visual Studio'yu da kullanabilirsiniz. Ancak, derleme ve lisanslama amacıyla mac hala gereklidir.

Test için derleyici ve simülatör sağlamak için Apple'ın Xcode IDE'sinin yüklenmesi gerekir. Kendi cihazlarınızda ücretsiz olarak test edebilirsiniz, ancak dağıtım uygulamaları (örneğin App Store) oluşturmak için Apple Geliştirici Programı'na (yılda 99 ABD doları) katılmanız gerekir. Bir uygulamayı her gönderdiğinizde veya güncelleştirdiğinizde, müşterilerin indirmesi için kullanıma sunulmadan önce apple tarafından gözden geçirilip onaylanması gerekir.

Kod Visual Studio IDE ile yazılır ve ekran düzenleri program aracılığıyla oluşturulabilir veya Mac'te Xcode ile düzenlenebilir.

Ayarlama hakkında ayrıntılı yönergeler için Xamarin.iOS Yükleme Kılavuzu'na bakın.

Android

Android uygulama geliştirme, Java ve Android SDK'larının yüklenmesini gerektirir. SDK'lar derleme, dağıtım ve test için gereken derleyici, öykünücü ve diğer araçları sağlar. Java, Google'ın Android SDK'sı ve Xamarin araçlarının tümü Windows ve macOS üzerinde yüklenebilir ve çalıştırılabilir. Aşağıdaki yapılandırmalar önerilir:

  • Visual Studio 2019 ile Windows 10
  • Mac için Visual Studio 2019 ile macOS Mojave (10.11+)

Xamarin, sisteminizi java, Android ve Xamarin araçlarıyla (ekran düzenleri için görsel tasarımcı dahil) yapılandıracak birleşik bir yükleyici sağlar. Ayrıntılı yönergeler için Xamarin.Android Yükleme Kılavuzu'na bakın.

Google'ın herhangi bir lisansı olmadan gerçek bir cihazda uygulama derleyebilir ve test edebilirsiniz, ancak uygulamanızı bir mağaza (Google Play, Amazon veya Barnes & Noble gibi) aracılığıyla dağıtmak için operatöre bir kayıt ücreti ödenebilir. Google Play, uygulamanızı anında yayımlarken, diğer mağazaların Apple'ınkine benzer bir onay süreci vardır.

Windows

Windows uygulamaları (WinForms, WPF veya UWP) Visual Studio ile oluşturulur. Xamarin'i doğrudan kullanmaz. Ancak C# kodu Windows, iOS ve Android arasında paylaşılabilir. Windows geliştirme için gereken araçlar hakkında bilgi edinmek için Microsoft'un Geliştirme Merkezi ziyaret edin.

Kullanıcı Arabirimi Oluşturma (UI)

Xamarin kullanmanın temel avantajlarından biri, uygulama kullanıcı arabiriminin her platformda yerel denetimler kullanması ve java ile yazılmış Objective-C bir uygulamadan ayırt edilemeyen uygulamalar oluşturmasıdır (sırasıyla iOS ve Android için).

Uygulamanızda ekran oluştururken, denetimleri kodda düzenleyebilir veya her platform için kullanılabilen tasarım araçlarını kullanarak eksiksiz ekranlar oluşturabilirsiniz.

Program Aracılığıyla Denetim Oluşturma

Her platform, kullanıcı arabirimi denetimlerinin kod kullanılarak bir ekrana eklenmesine olanak tanır. Bu, denetim konumları ve boyutları için piksel koordinatlarını sabit kodlama sırasında tamamlanmış tasarımı görselleştirmek zor olabileceğinden zaman alabilir.

Program aracılığıyla denetim oluşturmanın, özellikle i Telefon ve iPad ekran boyutları arasında farklı şekilde yeniden boyutlandıran veya işleyen görünümler oluşturmak için iOS'ta avantajları vardır.

Görsel Tasarım Aracı

Her platformun ekranları görsel olarak yerleştirmek için farklı bir yöntemi vardır:

  • iOS – Görsel Taslaklar birden çok Görünüm ve Denetim içerir ve içinde erişilebilir. Projenize dahil edilen görsel taslak dosyası.
  • Android – Xamarin, Visual Studio için android sürükle ve bırak kullanıcı arabirimi tasarımcısı sağlar.
  • Windows – Microsoft, Visual Studio ve Blend'de sürükle ve bırak kullanıcı arabirimi tasarımcısı sağlar. Ekran düzenleri olarak depolanır. XAML dosyaları.

Bu ekran görüntüleri, her platformda kullanılabilen görsel ekran tasarımcılarını gösterir:

These screenshots show the visual screen designers available on each platform

Her durumda, görsel olarak oluşturduğunuz öğelere kodunuzda başvurulabilir.

Kullanıcı Arabiriminde Dikkat Edilmesi Gerekenler

Platformlar arası uygulamalar oluşturmak için Xamarin kullanmanın temel avantajlarından biri, kullanıcıya tanıdık bir arabirim sunmak için yerel UI araç setlerinden yararlanabilmeleridir. Kullanıcı arabirimi de diğer tüm yerel uygulamalar kadar hızlı çalışır.

Bazı kullanıcı arabirimi metaforları birden çok platformda çalışır (örneğin, üç platform da benzer bir kaydırma listesi denetimi kullanır) ancak uygulamanızın doğru şekilde "hissedebilmesi" için kullanıcı arabiriminin uygun olduğunda platforma özgü kullanıcı arabirimi öğelerinden yararlanması gerekir. Platforma özgü kullanıcı arabirimi metaforlarına örnek olarak şunlar verilebilir:

  • iOS – arka yumuşak düğmeli hiyerarşik gezinti, ekranın alt kısmındaki sekmeler.
  • Android – donanım/sistem yazılımı geri düğmesi, eylem menüsü, ekranın üst kısmındaki sekmeler.
  • Windows – Windows uygulamaları masaüstleri, tabletler (Microsoft Surface gibi) ve telefonlarda çalıştırılabilir. Örneğin Windows 10 cihazlarında donanım geri düğmesi ve canlı kutucuklar olabilir.

Hedeflediğiniz platformlarla ilgili tasarım yönergelerini okumanız önerilir:

Kitaplık ve Kodu Yeniden Kullanma

Xamarin platformu, mevcut C# kodunun tüm platformlarda yeniden kullanılmasına ve her platform için yerel olarak yazılmış kitaplıkların tümleştirilmesine olanak tanır.

C# Kaynağı ve Kitaplıkları

Xamarin ürünleri C# ve .NET çerçevesini kullandığından, Xamarin.iOS veya Xamarin.Android projelerinde çok sayıda mevcut kaynak kodu (hem açık kaynak hem de şirket içi projeler) yeniden kullanılabilir. Genellikle kaynak bir Xamarin çözümüne eklenebilir ve hemen çalışır. Desteklenmeyen bir .NET framework özelliği kullanıldıysa bazı ayarlamalar gerekebilir.

Xamarin.iOS veya Xamarin.Android'de kullanılabilen C# kaynağı örnekleri şunlardır: SQLite-NET, NewtonSoft.JSON ve SharpZipLib.

Objective-C Bağlamalar + Bağlama Projeleri

Xamarin, kitaplıkların Xamarin.iOS projelerinde kullanılmasına izin veren Objective-C bağlamalar oluşturmaya yardımcı olan btouch adlı bir araç sağlar. Bunun nasıl yapıldığına ilişkin ayrıntılar için Bağlama Objective-C Türleri belgelerine bakın.

Objective-C Xamarin.iOS'ta kullanılabilecek kitaplıklara örnek olarak redlaser barkod tarama, Google Analytics ve PayPal tümleştirmesi verilebilir. Açık kaynak Xamarin.iOS bağlamaları GitHub'da kullanılabilir.

.jar Bağlamaları + Bağlama Projeleri

Xamarin, Xamarin.Android'de mevcut Java kitaplıklarının kullanılmasını destekler. Kullanma hakkında ayrıntılı bilgi için Java Kitaplığı Bağlama belgelerine bakın. Xamarin.Android'den JAR dosyası.

Açık kaynak Xamarin.Android bağlamaları GitHub'da kullanılabilir.

PInvoke aracılığıyla C

"Platform Çağırma" teknolojisi (P/Invoke), yönetilen kodun (C#) yerel kitaplıklardaki yöntemleri çağırmasına ve yerel kitaplıkların yönetilen koda geri çağrı yapmasını desteklemesine olanak tanır.

Örneğin, SQLite-NET kitaplığı aşağıdaki gibi deyimler kullanır:

[DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open (string filename, out IntPtr db);

Bu, iOS ve Android'de yerel C dili SQLite uygulamasına bağlanır. Mevcut bir C API'si hakkında bilgi sahibi olan geliştiriciler, yerel API'ye eşlemek ve mevcut platform kodunu kullanmak için bir dizi C# sınıfı oluşturabilir. Xamarin.iOS'ta yerel kitaplıkları bağlamaya yönelik belgeler vardır ve benzer ilkeler Xamarin.Android için de geçerlidir.

CppSharp aracılığıyla C++

Miguel, blogda CXXI'nin (artık CppSharp olarak adlandırılıyor) açıklamasını yaptı. C++ kitaplığına doğrudan bağlamanın bir alternatifi, bir C sarmalayıcısı oluşturmak ve P/Invoke aracılığıyla buna bağlanmaktır.