Windows Universal apps

Windows 8 alatt, ha egy alkalmazást több platformra szerettünk volna kiadni, az elég sok munkával és kódduplikációval járt. Voltak ugyan különféle lehetőségek ezek javítására, de többnyire ezek is jelentős hátrányokkal jártak és egyik sem jelentett igazi megoldást. Nemcsak fejlesztői, de felhasználói oldalon is akadtak ebből fakadó kényelmetlenségek, ha ugyanannak az alkalmazásnak több felületre kiadott verzióját is használni szerettük volna. Közös fizetési rendszer híján sok probléma volt egy-egy fizetős tartalom/applikáció elérésével olyan esetekben, ha például mobilon megvettünk, majd tableten is el szerettük volna érni. Ha pedig a programunk különböző platformon futó verziói között szerettünk volna beállításokat szinkronizálni, arra legfeljebb egy külső szolgáltatáson keresztül volt lehetőségünk(pl. skydrive, amihez a felhasználó beleegyezésére is szükség volt). Mindez egy kisebb szakadékot jelentett a mobilon és tableten/pc-n futó szoftverek között.

A Windows 8.1 és a Windows universal apps egy lépéssel közelebb visznek a megoldáshoz, számos újítást és lehetőséget hoztak, amelyek megkönnyítik a Windows 8.1 és Windows phone 8.1-re történő fejlesztést.

Új, egyesített API

Az új rendszerrel az API-k jelentős része egységesítve lett, ugyanúgy tudjuk őket használni mindkét rendszerből, szintúgy a controllok egy része közös API-t kapott, de mindemellett eltérő felülettel és viselkedéssel rendelkeznek.
Jó példa erre a Hub control, míg mobilon minden egyes szekció betölti a képernyőt, addig a store-os verzióban mérettől függően több szekciót is láthatunk egyszerre, mindezt úgy, hogy a mögöttük álló kód teljesen megegyezik.

hub_mobil

Hub control mobil felületen

hub_pc

Hub control tablet/pc felületen

comon_code_behind

közös kód a két felület mögött

 

 

 

 

 

 

 

 

 

Ugyan a két piac még nem lett teljesen egyesítve, de a universal apps lényegesen leegyszerűsíti az új fejlesztések és javítások elkészítését is. Nem kell mindent kétszer lekódolni, a patcheket pedig egy frissítésben is kiküldhetjük ezentúl.
A közös roaming data elérésével gond nélkül alkalmazhatunk azonos beállításokat minden felületen, és a megosztott értesítési rendszer(shared notification) segítségével a felhasználók értesítése is eredményesebb lehet.

Projekt felépítés

Universal app fejlesztéséhez legalább Visual Studio 2013-ra lesz szükségünk és egyenlőre 3 nyelv közül tudunk választani:

  • c# (XAML)
  • c++ (XAML)
  • javascript (HTML)

Új projekt létrehozása során a nyelv kiválasztása után a Store Apps > Universal Apps menüpont alatt találjuk a kiválasztott nyelvtől függően, több-kevesebb, studioval együtt kapott template-ket. Mindhárom nyelv esetén rendelkezésünkre áll a “Blank App” és az erősen preferált “Hub App” sablon, ez utóbbi az új Hub controlra építve nyújt egy 3 oldalas(áttekintő, csoportok, elemek) vázat a projektünk számára.

A solution felépítését tekintve 3 projektet kapunk a létrehozás után, egy windows 8.1-es, egy windows phone 8.1-es és egy shared projektet.

A shared projekt különlegessége, hogy ebből nem fordul assembly, mivel ez csak egy virtuális mappa a megosztott állományok számára. Azonban ez a projekt a másik két projekt referenciái között szerepel, tartalma mindkét projektbe belefordul, ide érdemes elhelyezni a programunk üzleti logikáját és a közös erőforrásokat.
Az előbbiekből adódóan a shared projektből is látjuk a másik két projektben előforduló elemeket.
Ha  olyan osztályra/függvényre hivatkozunk, ami mindkét projektben előfordul, akkor ezt gond nélkül megtehetjük, erre jó példa az App.xaml.cs fájlba generált kód, melyben a mindkét projektben definiált MainPage típusú oldalra navigálunk az alkalmazás elindítását követően.

// When the navigation stack isn't restored navigate to the
// first page, configuring the new page by passing required
// information as a navigation parameter
if (!rootFrame.Navigate(typeof(MainPage), e.Arguments))
{
    throw new Exception("Failed to create initial page");
}

Egyéb esetekben használhatunk fordítási direktívákat, ez esetben mindkét projektnél csak a kívánt kódrészek fordulnak bele a projektbe:

#if WINDOWS_PHONE_APP
        // Windows Phone specifikus kód futtatása
#endif

#if WINDOWS_APP
        // Windows specifikus kód futtatása
#endif

Ezeknél a fájloknál a szerkesztőablak bal felső sarkában választhatunk, hogy éppen a windows vagy windows phone specifikus kódrészen szeretnénk dolgozni, ezt követően az intellisense is csak az adott projekthez tartozó elemeket jeleníti meg, és a másik  projekthez tartozó, fordítási direktívák közé helyezett kódrész is kiszürkül, vizuálisan is segítve a munkánkat.

solution_2

További segítség, hogy szerkesztés közben az intellisense külön kiemeli a platform specifikus típusokat, ezzel megelőzve, hogy csak egy későbbi fordítás során derüljön ki, hogy a kódunk egy része nem fordul a másik platformon.

intellisense

Leave a Reply