Část 1 – Principy mobilní platformy Xamarin

Platforma Xamarin se skládá z mnoha prvků, které umožňují vyvíjet aplikace pro iOS a Android:

  • Jazyk C# – Umožňuje používat známou syntaxi a sofistikované funkce, jako jsou Generics, LINQ a Parallel Task Library.
  • Mono .NET Framework – poskytuje multiplatformní implementaci rozsáhlých funkcí v rozhraní .NET Framework společnosti Microsoft.
  • Kompilátor – V závislosti na platformě vytvoří nativní aplikaci (například iOS) nebo integrovanou aplikaci a modul runtime .NET (například Android). Kompilátor také provádí mnoho optimalizací pro mobilní nasazení, jako je propojení nepoužívaného kódu.
  • Nástroje IDE – Visual Studio na Macu a Windows umožňuje vytvářet, sestavovat a nasazovat projekty Xamarin.

Vzhledem k tomu, že základní jazyk je C# s rozhraním .NET Framework, můžou být projekty strukturované tak, aby sdílely kód, který lze také nasadit do systému Windows Telefon.

Pod kapotou

I když Xamarin umožňuje psát aplikace v jazyce C# a sdílet stejný kód napříč několika platformami, skutečná implementace v každém systému se liší.

Kompilace

Zdroj jazyka C# vytváří svůj způsob v nativní aplikaci různými způsoby na jednotlivých platformách:

  • iOS – C# je předem zkompilovaný do jazyka sestavení ARM. Součástí rozhraní .NET Framework jsou nevyužité třídy, které se během propojení odstraňují, aby se zmenšila velikost aplikace. Apple nepovoluje generování kódu modulu runtime v iOSu, takže některé jazykové funkce nejsou dostupné (viz omezení Xamarin.iOS).
  • Android – C# je zkompilován do IL a zabalený pomocí MonoVM + JIT'ing. Nevyužité třídy v rozhraní jsou během propojení zrušeny. Aplikace běží souběžně s modulem Java/ART (Android runtime) a komunikuje s nativními typy prostřednictvím JNI (viz omezení Xamarin.Android).
  • Windows – C# se kompiluje do IL a spouští se integrovaným modulem runtime a nevyžaduje nástroje Xamarin. Návrh aplikací pro Windows podle pokynů pro Xamarin usnadňuje opakované použití kódu v iOSu a Androidu. Univerzální platforma Windows má také možnost .NET Native, která se chová podobně jako kompilace AOT Xamarin.iOS.

Další informace o této části procesu kompilace najdete v dokumentaci linkeru pro Xamarin.iOS a Xamarin.Android .

Běhu kompilace – generování kódu dynamicky s System.Reflection.Emit – by se mělo vyhnout.

Jádro Společnosti Apple brání dynamickému generování kódu na zařízeních s iOSem, takže v Xamarin.iOS nebude generovat kód za běhu. Stejně tak nelze s nástroji Xamarin používat funkce modulu runtime dynamického jazyka.

Některé funkce reflexe fungují (například MonoTouch.Dialog ho používá pro rozhraní API Reflexe ion), ale ne pro generování kódu.

Přístup k sadě SDK platformy

Xamarin zpřístupňuje funkce poskytované sadou SDK pro konkrétní platformu pomocí známé syntaxe jazyka C#:

  • iOS – Xamarin.iOS zveřejňuje architektury Sady CocoaTouch SDK společnosti Apple jako obory názvů, na které můžete odkazovat z jazyka C#. Součástí jednoduchého using UIKit; příkazu může být například architektura UIKit, která obsahuje všechny ovládací prvky uživatelského rozhraní.
  • Android – Xamarin.Android zveřejňuje sadu Android SDK společnosti Google jako obory názvů, takže můžete odkazovat na libovolnou část podporované sady SDK pomocí příkazu using, například using Android.Views; pro přístup k ovládacím prvkům uživatelského rozhraní.
  • Windows – aplikace pro Windows se vytvářejí pomocí sady Visual Studio ve Windows. Typy projektů zahrnují model Windows Forms, WPF, WinRT a Univerzální platforma Windows (UPW).

Bezproblémová integrace pro vývojáře

Výhodou Xamarinu je, že bez ohledu na rozdíly pod kapotou, Xamarin.iOS a Xamarin.Android (ve spojení se sadami SDK Pro Windows) nabízejí bezproblémové prostředí pro psaní kódu jazyka C#, který lze opakovaně používat na všech třech platformách.

Obchodní logika, využití databáze, přístup k síti a další běžné funkce se dají na každé platformě zapsat a znovu použít, což poskytuje základ pro uživatelská rozhraní specifická pro platformu, která vypadají a fungují jako nativní aplikace.

Dostupnost integrovaného vývojového prostředí (IDE)

Vývoj pro Xamarin je možné provést v sadě Visual Studio na Macu nebo Ve Windows. Zvolené integrované vývojové prostředí bude určeno platformami, na které chcete cílit.

Vzhledem k tomu, že aplikace pro Windows je možné vyvíjet jenom ve Windows, aby bylo možné sestavovat pro iOS, Android a Windows, vyžaduje Visual Studio pro Windows. Je ale možné sdílet projekty a soubory mezi počítači s Windows a Mac, takže aplikace pro iOS a Android je možné později přidat do projektu pro Windows.

Požadavky na vývoj pro každou platformu jsou podrobněji popsány v průvodci požadavky .

iOS

Vývoj aplikací pro iOS vyžaduje počítač Mac se systémem macOS. Pomocí sady Visual Studio můžete také psát a nasazovat aplikace pro iOS pomocí Xamarinu v sadě Visual Studio. Pro účely sestavení a licencování je ale stále potřeba Mac.

Aby bylo možné poskytnout kompilátor a simulátor pro testování, musí být nainstalované integrované vývojové prostředí Xcode společnosti Apple. Můžete testovat na vlastních zařízeních zdarma, ale pokud chcete vytvářet aplikace pro distribuci (například App Store), musíte se připojit k programu Apple Developer Program (99 USD za rok). Pokaždé, když aplikaci odešlete nebo aktualizujete, musí ji společnost Apple před stažením zkontrolovat a schválit.

Kód je napsaný pomocí integrovaného vývojového prostředí sady Visual Studio a rozložení obrazovky lze programově sestavit nebo upravit pomocí Xcode na Macu.

Podrobné pokyny k nastavení najdete v průvodci instalací Xamarin.iOS.

Android

Vývoj aplikací pro Android vyžaduje instalaci sad Java a Android SDK. Sady SDK poskytují kompilátor, emulátor a další nástroje potřebné k sestavení, nasazení a testování. Všechny nástroje Sady Android SDK a Xamarinu od Googlu je možné nainstalovat a spustit ve Windows a macOS. Doporučuje se následující konfigurace:

  • Windows 10 se sadou Visual Studio 2019
  • macOS Mojave (10.11+) se sadou Visual Studio 2019 pro Mac

Xamarin poskytuje jednotný instalační program, který nakonfiguruje systém s požadovanými nástroji Java, Android a Xamarin (včetně vizuálního návrháře pro rozložení obrazovky). Podrobné pokyny najdete v průvodci instalací Xamarin.Android.

Aplikace můžete vytvářet a testovat na skutečném zařízení bez jakékoli licence od Googlu, ale k distribuci vaší aplikace prostřednictvím obchodu (například Google Play, Amazon nebo Barnes & Noble) může být poplatek za registraci platit provozovateli. Google Play vaši aplikaci publikuje okamžitě, zatímco ostatní obchody mají schvalovací proces podobný apple.

Windows

Aplikace pro Windows (WinForms, WPF nebo UPW) jsou vytvořené pomocí sady Visual Studio. Nepoužívají Xamarin přímo. Kód jazyka C# se ale dá sdílet napříč Windows, iOSem a Androidem. Navštivte Dev Center společnosti Microsoft a seznamte se s nástroji potřebnými pro vývoj pro Windows.

Vytvoření uživatelského rozhraní (UI)

Klíčovou výhodou použití Xamarinu je, že uživatelské rozhraní aplikace používá nativní ovládací prvky na každé platformě a vytváří aplikace, které jsou nerozlišitelné od aplikace napsané v Objective-C javě (pro iOS a Android).

Při vytváření obrazovek v aplikaci můžete buď rozložení ovládacích prvků v kódu, nebo vytváření celých obrazovek pomocí nástrojů pro návrh dostupných pro každou platformu.

Vytváření ovládacích prvků prostřednictvím kódu programu

Každá platforma umožňuje přidání ovládacích prvků uživatelského rozhraní na obrazovku pomocí kódu. To může být časově náročné, protože může být obtížné vizualizovat hotový návrh, když jsou souřadnice pixelů pevně zakódované pro řídicí pozice a velikosti.

Vytváření ovládacích prvků prostřednictvím kódu programu má ale výhody, zejména v iOSu pro vytváření zobrazení, která mění velikost nebo vykreslují různě v různých velikostech obrazovky i Telefon a iPad.

Vizuální návrhář

Každá platforma má jinou metodu vizuálního rozložení obrazovek:

  • iOS – Scénáře obsahují více zobrazení a ovládacích prvků a lze k němu přistupovat v systému . Soubor storyboardu , který je součástí projektu.
  • Android – Xamarin poskytuje návrhář uživatelského rozhraní pro přetahování pro Android pro Visual Studio.
  • Windows – Microsoft poskytuje návrhář uživatelského rozhraní přetahování v sadě Visual Studio a Blend. Rozložení obrazovky jsou uložena jako . Soubory XAML.

Tyto snímky obrazovky znázorňují vizuální návrháře obrazovky dostupné na jednotlivých platformách:

These screenshots show the visual screen designers available on each platform

Ve všech případech lze na prvky, které vytvoříte vizuálně, odkazovat ve vašem kódu.

Důležité informace o uživatelském rozhraní

Klíčovou výhodou použití Xamarinu k vytváření multiplatformních aplikací je, že můžou využívat nativní sady nástrojů uživatelského rozhraní k prezentaci známého rozhraní pro uživatele. Uživatelské rozhraní bude také fungovat stejně rychle jako jakákoli jiná nativní aplikace.

Některé metafory uživatelského rozhraní fungují na různých platformách (například všechny tři platformy používají podobný ovládací prvek seznam posouvání), ale aby se vaše aplikace mohla cítit správně, uživatelské rozhraní by mělo v případě potřeby využívat prvky uživatelského rozhraní specifické pro danou platformu. Mezi příklady metafor uživatelského rozhraní specifické pro platformu patří:

  • iOS – hierarchická navigace s tlačítkem soft back, kartami v dolní části obrazovky.
  • Android – hardwarové/systémové tlačítko zpět, nabídka akcí, karty v horní části obrazovky.
  • Windows – aplikace pro Windows můžou běžet na stolních počítačích, tabletech (jako je Microsoft Surface) a telefonech. Zařízení s Windows 10 můžou mít například tlačítko zpět hardwaru a živé dlaždice.

Doporučujeme, abyste si přečetli pokyny pro návrh relevantní pro platformy, na které cílíte:

Opakované použití knihovny a kódu

Platforma Xamarin umožňuje opakovaně používat stávající kód jazyka C# na všech platformách a integraci knihoven napsaných nativně pro každou platformu.

Zdroj a knihovny jazyka C#

Vzhledem k tomu, že produkty Xamarin používají jazyk C# a rozhraní .NET, je možné v projektech Xamarin.iOS nebo Xamarin.Android znovu použít mnoho stávajících zdrojových kódů (opensourcových i interních projektů). Zdroj je často možné jednoduše přidat do řešení Xamarin a bude okamžitě fungovat. Pokud byla použita nepodporovaná funkce rozhraní .NET Framework, můžou se vyžadovat některé vylepšení.

Mezi příklady zdroje jazyka C#, který lze použít v Xamarin.iOS nebo Xamarin.Android, patří: SQLite-NET, NewtonSoft.JSON a SharpZipLib.

Objective-C Vazby + vazbové projekty

Xamarin poskytuje nástroj s názvem btouch , který pomáhá vytvářet vazby, které umožňují Objective-C použití knihoven v projektech Xamarin.iOS. Podrobnosti o tom, jak to udělat, najdete v dokumentaci k typům vazebObjective-C.

Mezi příklady knihoven, které je možné použít v Xamarin.iOS, patří: skenování čárových Objective-C kódů RedLaser, Google Analytics a integrace PayPalu. Open source vazby Xamarin.iOS jsou k dispozici na GitHubu.

vazby .jar + projekty vazeb

Xamarin podporuje použití existujících knihoven Java v Xamarin.Androidu. Podrobnosti o tom, jak používat knihovnu Java, najdete v dokumentaci k vazbě knihovny Java. Soubor JAR z Xamarin.Android.

Open source vazby Xamarin.Android jsou k dispozici na GitHubu.

C přes PInvoke

Technologie "Volání platformy" (P/Invoke) umožňuje spravovanému kódu (C#) volat metody v nativních knihovnách a také podporu nativních knihoven pro volání zpět do spravovaného kódu.

Například knihovna SQLite-NET používá příkazy, jako je tento:

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

Tím se vytvoří vazba na nativní implementaci SQLite jazyka C v iOSu a Androidu. Vývojáři obeznámení s existujícím rozhraním API jazyka C# mohou vytvořit sadu tříd jazyka C#, které se mapují na nativní rozhraní API a využívají stávající kód platformy. K dispozici je dokumentace pro propojení nativních knihoven v Xamarin.iOS, podobné principy platí pro Xamarin.Android.

C++ přes CppSharp

Miguel vysvětluje CXXI (nyní se nazývá CppSharp) na svém blogu. Alternativou k přímé vazbě ke knihovně jazyka C++ je vytvoření obálky jazyka C a vytvoření vazby k této knihovně prostřednictvím volání nespravovaného kódu.