Vývoj univerzálnych aplikácií pre Windows 8.1 a Windows Phone 8.1

Univerzálny prístup k vývoju aplikácií pre Windows zariadenia (Tablety/PC a smartfóny) výrazne zrýchľuje a zjednodušuje vytváranie aplikácií spustiteľných zároveň na tabletoch/počítačoch a smartfónoch. Tento vývoj je súčasne predprípravou Vašej aplikácie na prechod na novú verziu Windows 10, ktorý bude jednotným systémom pre PC, notebooky, tablety, smartfóny, Xbox a IoT zariadenia. Základom tohto univerzálneho vývoja aplikácií je zjednotená množina “API-čiek“ tzv. Windows Runtime, na ktorej sú moderné aplikácie pre Windows zariadenia postavené. S príchodom verzií Windows 8.1 a Windows Phone 8.1 prišlo k nárastu prekryvu týchto API na viac ako 90%. Vzhľadom na isté rozdiely medzi zariadeniami nie je možné dosiahnuť prekryv 100% (napr. API na prácu s telefónnymi kontaktmi nemá význam v počítači/tablete).

Obr. 1. - Prekryv WinRT API

Nástroj Visual Studio vám poskytuje šablónu riešenia pre vytvorenie univerzálnej aplikácie. V rámci takéhoto riešenia môžete vytvoriť používateľské rozhranie unikátne pre daný typ zariadenia s využitím technológií XAML, HTML alebo DirectX, pričom zdieľaný kód/logiku aplikácie môžete naprogramovať v programovacích jazykoch C#, C++ alebo JavaScript.

Po naprogramovaní aplikácie môžete vytvoriť aplikačné balíčky, ktoré nahráte do Windows a Windows Phone obchodu a sprístupníte ich tak používateľom, resp. zákazníkom.

Benefitom takéhoto vývoja pre vás nie je len jeho zjednodušenie a zrýchlenie, no taktiež fakt, že vďaka univerzálnej aplikácií adresujete oveľa širšiu množinu používateľov a tak máte lepšiu možnosť na monetizáciu vašej aplikácie. Tento spôsob vývoja však prináša benefit aj pre vašich budúcich používateľov, nakoľko identita aplikácie je zdieľaná naprieč Windows aj Windows Phone obchodom. Zdieľaná identita znamená, že ak si používateľ zakúpi Vašu aplikáciu vo Windows obchode, je mu umožnené nainštalovať si ju aj na zariadenie Windows Phone bez nutnosti opätovnej platby (pri použití rovnakého Microsoft účtu). Toto zdieľanie môže zahŕňať aj nákup obsahu v rámci aplikácie.

V ďalších častiach tohto článku opíšeme ako začať s univerzálnym vývojom aplikáciíako vytvoriť z existujúcej Windows alebo Windows Phone aplikácie aplikáciu univerzálnu.

Univerzálny vývoj Windows aplikácií - ako na to?

Podmienkou univerzálneho vývoja aplikácií pre Windows zariadenia je adresovanie Windows Runtime. To znamená, že pri vývoji takejto aplikácie nie je možné využiť prístup s využitím Silverlight-u pre Windows Phone časť, ktorý je však pre vývoj samostatných aplikácií pre Windows Phone 8.1 stále dostupný.

Pre vývoj univerzálnych Windows aplikácií je potrebné nainštalovať si Visual Studio 2013 update 2 alebo vyššie. Postup založenia projektu univerzálnej aplikácie je nasledovný:

  1. Po otvorení VS kliknite na File (Súbor) => New Project (Nový projekt)
  2. Otvorí sa vám nové okno s názvom New Project (Nový projekt)
  3. V ľavej časti okna sa nachádza zoznam dostupných šablón. Vyberte si a rozkliknite váš preferovaný programovací jazyk, ďalej rozbaľte sekciu Store apps  a zvoľte Universal Apps (viď obr. 2).                                                                          Obr. 2. - Založenie nového univerzálneho projektu
  4. Na výber máte dve pred-vytvorené šablóny a síce Blank app (Prázdna aplikácia), ktorá je vhodná pre jednoduché jedno-stránkové aplikácie. Hub app, ktorá obsahuje tri stránky a Hub komponent(https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.ui.xaml.controls.hub.aspx).
    V rámci tejto šablóny resp. predvytvoreného projektu je vám k dispozicií navigačný „pomocník“ (helper) a taktiež tzv. „pozorovateľna kolekcia“ (Observable collection), za pomoci ktorej je možné dynamické naviazanie dát do rozhrania, t.z., že pri zmene dát na pozadí, sa táto zmena premietne aj do rozhrania. Založenie projektu s využitím Hub app šablóny sa odporúča pri vytváraní akejkoľvek aplikácie pozostávajúcej z viac ako jednej stránky. Taktiež je možné vytvoriť Knižničnú triedu (Class library) resp. Windows Runtime komponent, ktorých využitie sa predpokladá vo viacerých projektoch. Je tak možné izolovať funkcionalitu, ktorá sa využije vo viacerých aplikáciách.

Keďže sa v tomto príspevku venujeme tvorbe univerzálnych aplikácií a nie znovu-použiteľným komponentom, ukážeme si stavbu riešenia (solution) založeného s využitím Hub app šablóny a jazyku C#. Stavbu riešenia môžeme vidieť na obr. 3.

Obr. 3. - Zloženie riešenia univerzálnej aplikácie

Riešenie je rozčlenené na tri časti a síce časť obsahujúcu súbory pre Windows, časť obsahujúcu Windows Phone súbory a zdieľanú časť (Shared), do ktorej sa umiestňuje všetok spoločný kód, ktorý ideálne obsahuje celú biznis logiku.

Pre spustenie a debugovanie aplikácie je možné vybrať cieľový projekt a síce pravým klikom myši na daný projekt (Windows alebo Windows Phone) v Prehľade riešenia (Solution explorer) a vybraním možnosti Nastaviť ako spúšťaný projekt (Set as StartUp Project) obr. 4.

Obr. 4. - Nastavenie spúšťaného projektu

Pri delení kódu medzi projekty je dobré ponechať špecifickú funkcionalitu či už pre Windows, alebo Windows Phone v príslušných projektoch a neimplementovať špecifickú logiku v zdieľanej časti riešenia. Čo sa týka kódu grafického rozhrania, tu sa odporúča mať vždy samostatné súbory pre Windows a Windows Phone. Samozrejme je možné vytvoriť jednotné rozhranie, ktoré sa zobrazí správne aj na Windows aj na Windows Phone zariadeniach a teda netvoriť grafické rozhranie duplicitne, avšak jednotlivé komponenty GUI vo Windows a Windows Phone aplikácie sa vo veľa prípadoch do určitej miery líšia, a preto je vytvorenie zdieľaného grafického rozhrania triviálne iba pre tie najjednoduchšie aplikácie.

Pri delení kódu je možné využiť schopnosť jazyka C# definovať triedu naprieč viacerými fyzickými súbormi a síce prostredníctvom kľučového slova partial umiestneného pred definíciou triedy. Takto je v našom riešení označená napríklad trieda App.xaml.cs, ktorá slúži na inicializáciu aplikácie. Kód resp. metódy, ktoré sú relevantné aj pre Windows aj pre Windows Phone aplikáciu sa nachádzajú v zdieľanej oblasti a špecifický kód sa nachádza výhradne v rámci príslušných projektov. Ako sme napísali, dobrým zvykom je umiestňovať špecifický kód pre Windows a Windows Phone do príslušných projektov, avšak ak ide o malé odlišnosti v metódach využívaných v rámci Windows aj Windows Phone aplikácie (pár riadkov kódu), je možné využiť kompilačné podmienky. Tieto podmienky umožňujú vyčleniť kód určený pre Windows a Windows Phone. Tieto kompilačné podmienky sú  pre Windows #if WINDOW _APP a pre Windows Phone => #if WINDOWS_PHONE_APP a nachádzajú sa napríklad v súbore App.xaml.cs.

Pri súboroch zo zdieľanej oblasti je možné meniť aktuálny kontext, a to na Windows alebo Windows Phone. Toto prepínanie je znázornené na obr. 5.

Obr. 5. - Zmena kontextu

Pri zmene kontextu si môžete všimnúť zafarbovanie resp. zašednutie kódu v rámci kompilačných podmienok, kedy farebný kód sa vzťahuje k aktuálne zvolenému kontextu a šedý nie.

V krátkosti sme vám poskytli návod ako vytvoriť univerzálnu aplikáciu. Prístup univerzálneho vývoja aplikácií vám umožňuje do veľkej miery eliminovať  opakujúci sa kód prostredníctvom zdieľania kódu (zdieľanej časti aplikácie), no je nutné povedať, že exaktné členenie kódu je špecifické pre každú aplikáciu a pre každého programátora a neexistuje univerzálny prístup tohto členenia. Existujú iba pomôcky, ktoré vám pri členení kódu pomôžu.

V nasledujúcej časti ukážeme, ako zmeniť existujúci Windows 8.1 app/ Windows Phone 8.1 app projekt na univerzálnu aplikáciu

Upgrade existujúceho projektu na univerzálnu aplikáciu

Pri tomto upgrade ide v princípe o pridanie Windows Phone, resp. Windows projektu a zdieľanej časti do existujúceho riešenia. Predpokladom je existujúca Windows 8.1 alebo Windows Phone 8.1 aplikácia adresujúca Win RT. Zatiaľ čo sa vývoj pre Windows Phone s príchodom verzie 8.1 zmenil výraznejšie (možnosť adresovať Win RT APIs), pre Windows 8.1 táto zmena nebola taká výrazná. Preto ak máte modernú aplikáciu, ktorú ste programovali pre zariadenia so systémom Windows 8  a má význam túto aplikáciu portovať aj na mobilné zariadenia, odporúčame upgradovať projekt resp. aplikáciu najskôr na verziu 8.1 a následne vytvoriť z tohto projektu projekt univerzálnej aplikácie. Upgradovanie Windows aplikácie z verzie 8 na verziu 8.1 je veľmi jednoduché a pozostáva z nasledovných základných krokov:

  1. Pre každý prípad si zkopírujte Vaše riešenie do nového adresára, z dôvodu zálohy.
  2. Zmeňte cielenú verziu na verziu 8.1
  3. Opravte chyby týkajúce sa ciest k súborom, knižniciam a rozširujúcim SDK.
  4. Aktualizujte svoj kód tak, aby využíval nové API
  5. Podporujte Windows 8 verziu vašej aplikácia

Bližšie informácie k tejto téme môžete nájsť na nasledovnej webovej lokalite: https://msdn.microsoft.com/en-GB/library/windows/apps/dn263114.aspx

Samotná konverzia projektu na projekt univerzálnej aplikácie sa vykoná taktiež veľmi jednoducho a síce stačí v okne Solution Explorer kliknuť pravým tlačidlom na názov projektu. V zobrazenom kontextovom menu následne vyberte položku Add Windows Phone 8.1 v prípade, že konvertujete existujúcu Windows 8.1 aplikáciu, resp. Add Windows 8.1 v prípade, že konvertujete Windows Phone 8.1 aplikáciu (viď obr. 6). Samozrejme po tomto kroku musíte vhodne zvoliť zdieľané časti kódu a pre pridanú platformu prispôsobiť/vytvoriť používateľské rozhranie.

Obr. 6. - Pridanie projektu (platformy)

V tomto blogu sme sa snažili v jednoduchosti vysvetliť základy vývoja univezalných aplikácií pre Windows a Windows Phone. Pre ďalšie informácie ohľadom vývoja aplikácií pre tieto platformy vám odporúčame navštíviť stránku https://dev.windows.com/en-us alebo knižku Vývoj univerzálnych aplikácií Pre windows 8 a Windows Phone 8.1 od Ľuboslava Lacka.

Marek.