Hlavní navigace

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

Jan Pospíšil

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.

Našli jste v článku chybu?

18. 4. 2013 9:09

svet sa meni (neregistrovaný)

Svet sa meni,
.NET je opensourse a Microsoft je najvetcim prispievatelom pre jQuery


18. 4. 2013 9:23

Už jsou napsané všechny tři díly, následující dva čtvrtky se na ně můžete těšit.

Vitalia.cz: Poznáte poctivé suroviny na pečení cukroví?

Poznáte poctivé suroviny na pečení cukroví?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

120na80.cz: Jmelí je více léčivé než jedovaté

Jmelí je více léčivé než jedovaté

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: I církev dnes vyrábí potraviny

I církev dnes vyrábí potraviny