Vývoj pro mobilní platformy s C# (první část)

Jan Pospíšil 18. 4. 2013

V prvním dílu třídílného seriálu se chci věnovat přehledu technologií na dnešním trhu a stručnému popisu jejich technologií. Dále bych rád velmi rychle představil knihovny firmy Xamarin, které jsem při vývoji využil. Poslední částí prvního dílu bude nástin toho, jak sdílet jeden kód pro více platforem.

Trh s mobilními telefony a aplikacemi ovládají tři velcí hráči: Google s Androidem, Apple s iPhonem a posledním je Microsoft s Windows Phone. Jak vyvíjet aplikace pro tyto mobilní platformy způsobem „napsat jednou, spustit kdekoliv“ (Write once, Run anywhere). Každá s platforem má svůj vlastní programovací jazyk pro vývoj aplikací a daný hardware.

Apple, iPhone

Apple pro svoje zařízení (iPod Touch, iPhone a iPad) se rozhodl používat programovací jazyk Objective-C. Objective-C je objektově orientovaný jazyk, který vznikl implementací vlastností programovacího jazyka Smalltalk do klasického jazyka C. Pro vývoj pro mobilní aplikace se používá framework pro uživatelské rozhraní Cocoa Touch, který je odvozen z Cocoa frameworku pro Mac OS. Tyto knihovny jsou součástí iOS SDK, které je nepostradatelné pro vývoj jakýkoliv aplikací pro desktopové i mobilní aplikace spustitelné pod iOS operačním systémem.

Google, Android

Google se rozhodl použít pro svůj mobilní operační systém objektový programovací jazyk Java. Google se dlouho rozhodoval, zda použít jazyk Java nebo C#. Výhodou C# je standard ECMA-334 a také příslib Microsoft komunity, že jakékoliv patenty nebudou nikdy vymáhány. Kdyby tedy nakonec zvolil C#, tak by se zřejmě vyhnul jakýmkoliv žalobám a nemusel by se teď strachovat soudního sporu s Oracle. Operační systém Android se používá ve velmi různých zařízeních např.: chytré telefony, PDA, navigace, tablety, Google TV, čtečky elektronických knih.

Microsoft, Windows Phone

Microsoft se poučil s operačního systému Windows Mobile a kompletně přepracoval operační systém pro mobilní zařízení a nazval ho Windows Phone 7. Změna přístupu, zaměření spíše na běžné uživatele, pomohla a Windows Phone se stal populární. Následně Microsoft vydal verze 7.5 (Mango), 7.5 (Tango) a koncem roku 2012 se čeká na vydání verze 8.0 (Apollo), který bude obsahovat nové jádro operačního systému, podporu vícejádrových procesorů a jednoduchou portaci aplikací. Pro vývoj pro Windows Phone se používá .Net framework se specifickými omezeními a jazyka C# a VB.NET.

Write once, Run anywhere

Jedním řešením problému je použít knihovny firmy Xamarin. Tato firma se v roce 2011 rozhodla převzít vývoj a podporu projektu Mono. Mono je open-source projekt, jehož cílem je vytvořit multiplatformní implementaci .Net frameworku při zachování standardů ECMA. Mono je skutečně multiplatformní, je podporován na operačních systémech: Microsoft Windows, Linux, Unix, OS X, Solaris, BSD, Android, iOS a také na některých herních konzolích, jako např. PlayStation 3, Wii, Xbox 360. Současná verze Mono implementuje Microsoft .Net framework 4.0 se všemi jeho hlavními funkcemi a vlastnostmi. Součástí projektu jsou také nástroje pro podporu vývoje, C# kompilátoru a implementace různých dalších knihoven. Příkladem těchto knihoven a nástrojů jsou:

  • MonoDevep – jde o IDE pro všechny Mono projekty.

  • Moonlight – je open-source implementace Microsoft Silverlight pro operační systémy založené na Unixu.

  • MonoMac – je specialní port Cocoa frameworku pro vývoj aplikací pro OS X operační systém.

  • MonoGame – je open-source implementace Microsoft XNA 4.0, pro vývoj 2D a 3D akcelerovaných aplikací pro herní konzole a mobilní zařízení.

  • MonoTouch – je sada knihoven pro vývoj aplikací pro mobilní Apple za řízení.

  • MonoDroid (Mono for Android) – je sada knihoven pro vývoj aplikací, které běží na operačním systému Android.

Samozřejmě, že pro řešení našeho „mobilního“ problému, budeme potřebovat MonoTouch a MonoDroid. Obě sady knihoven jsou pouze nadstavbou nativních rozhraních obou platforem. Výhodou tohoto přístupu je, že máme jeden zdrojový kód napsaný v C#, který má různé uživatelské rozhraní závisející na sadě knihoven se kterými je přeložíme. Knihovny také implementují všechny třídy z jmenných prostorů BCL (Base Class Library) knihoven. Také lze do projektů přilinkovat knihovny třetích stran, napsané v jakékoliv jazyce z rodiny .Net.

Techniky sdíleni kódu mezi aplikacemi

Z příkladů kódu vidíme, že zdrojové kódy aplikací jsou docela hodně odlišné, jak tedy budeme schopni splnit požadavek jednoho zdrojového kódu a aplikace pro různé platformy?

Prvním předpokladem pro splnění požadavku je dobře navrhnout architekturu aplikace. Doporučovaný návrhovým vzorem pro tento typ aplikace je Model-View-ViewModel, viz Obrázek 10. Tento návrhový vzor je doporučován také samotným Microsoftem. Jedná se o modifikaci klasického návrhového vzoru Model-View-Controller. Modely a view jsou místa společného zdrojového kódu. Aplikace se bude výrazně lišit pouze ve viewmodelech, které budou odpovídat implementaci na dané platformě. Vytvoříme projekty pro jednotlivé platformy odděleně. Vytvoříme adresář, který bude obsahovat zdrojové kódy s modely a view aplikace. Tento adresář musí být na místě, na které můžeme přistoupit ze všech operačních systémů, na kterých vyvíjíme aplikaci. Modely a view přidáme do projektů jako odkaz, tak udržíme jeden zdrojový kód pro všechny aplikace. Každou změnu společného zdrojového kódu je třeba otestovat ve všech projektech. Velice dobrou a hodně doporučovanou strategií pro vývoj mobilních Mono aplikací je podmíněný překlad. Jednu platformu si zvolíme jako výchozí, např. Windows Phone. Potom definujeme překladová makra __IOS__ a __ANDROID__. Pomocí těchto maker a překladové direktivy #ifdef a #endif, vytvoříme bloky, které se budu ve sdíleném kódu překládat pokud budeme vytvářet aplikaci pro danou platformu.

Velmi silný a jednoduchý nástroj je využít možnosti objektového programování, jmenovitě abstrakce a mechanismu částečných tříd (partial classes). Abstrakci použijeme následovně. Vytvoříme bázové třídy, které obsahují zdrojový kód společný pro všechny platformy. Přidáváme nebo přepisujeme metody tak, aby odpovídali specifikace dané platformy. Druhou možností je ve třídě definovat rozhraní na třídu, která bude obsahovat zdrojový kód určený pro danou platformu. Tímto způsobem můžeme skládat jako skládačku, které bude přesnou specifikací funkcionality pro danou platformu. Použití částečných tříd je ještě jednodušší. Definuje třídu s klíčovým slovem partial. Toto klíčové slovo říká, že definice třídy bude rozdělena do více souborů. Jedna část třídy bude součástí společného zdrojového kódu, druhá část bude součástí zdrojového kódu pro danou platformu. Tímto způsobem jednoduše a efektivně rozdělit kód i jeho překlad.

Tak toto je základní úvod, jak se vypořádat s vývojem aplikací pro mobilní platformy za použití jazyka C#. V dalším díle si ukážeme, jak prakticky používat knihovny firmy Xamarin, případně jak se vypořádat s některými zákeřnostmi vývoje s jazykem C# u jednotlivých platforem.

Vitalia.cz: Taky ji kupujete? Je šizená

Taky ji kupujete? Je šizená

Vitalia.cz: Mražené ryby z Makra byly falšované

Mražené ryby z Makra byly falšované

120na80.cz: Zjistěte, zda je vaše klíště infikované

Zjistěte, zda je vaše klíště infikované

DigiZone.cz: Budoucnost video služeb na internetu

Budoucnost video služeb na internetu

120na80.cz: Velký přehled: 7 očkování proti exotickým nemocem

Velký přehled: 7 očkování proti exotickým nemocem

Vitalia.cz: Muži kouří 24 cigaret denně, ženy o dost míň

Muži kouří 24 cigaret denně, ženy o dost míň

Root.cz: Zákon o hazardu je v rozporu s ústavou

Zákon o hazardu je v rozporu s ústavou

120na80.cz: 5 triků, jak zastavit krvácení po holení

5 triků, jak zastavit krvácení po holení

Lupa.cz: Kam si doma dáte internet věcí? Na polici?

Kam si doma dáte internet věcí? Na polici?

Vitalia.cz: Děti jsou sportem opotřebované

Děti jsou sportem opotřebované

Lupa.cz: Jak EET vidí ajťák aneb Drahá vražda UX

Jak EET vidí ajťák aneb Drahá vražda UX

Vitalia.cz: Ministerstvo: tyto příbory jsou nebezpečné

Ministerstvo: tyto příbory jsou nebezpečné

Vitalia.cz: Sója a rakovina

Sója a rakovina

DigiZone.cz: Šlágr TV: pokuta 100 tisíc za on-line

Šlágr TV: pokuta 100 tisíc za on-line

Lupa.cz: Babiš: nevím o návodu, jak obejít blokování webů

Babiš: nevím o návodu, jak obejít blokování webů

DigiZone.cz: DAB+ versus FM, ČRo a ČRa proti APSV

DAB+ versus FM, ČRo a ČRa proti APSV

DigiZone.cz: UPC umí televizi sedm dní nazpět

UPC umí televizi sedm dní nazpět

DigiZone.cz: Konec geoblokace online médií?

Konec geoblokace online médií?

Vitalia.cz: Tetanus v USA – i po odřeninách

Tetanus v USA – i po odřeninách

DigiZone.cz: ČT neskončí s nízkým rozlišením podle plánu

ČT neskončí s nízkým rozlišením podle plánu