Hlavní navigace

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

18. 4. 2013
Doba čtení: 5 minut

Sdílet

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.

CS24_early

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.

Byl pro vás článek přínosný?

Autor článku

Jan Pospíšil, .NET vývojář ve společnosti Adastra.