Sledujte nás na YouTube

Novinky ve Windows Phone 8.1 SDK: Silverlight 8.1 vs. Windows Phone 8.1 (2. díl)

V druhém díle našeho seriálu se podvíme na rozdíly mezi typy projektů – Silverlight 8.1 a Windows Phone 8.1. Podíváme se také, na co si dát pozor při aktualizaci stávajícího projektu.

V prvním díle našeho seriálu o novinkách ve Windows Phone 8.1 pro vývojáře jsme si popsali, co tato platforma nabízí a jaké nové nejen Windows Runtime API mají nyní vývojáři k dispozici. V tomto dílu se zaměříme na hlavní rozdíly mezi novými typy projektů: Silverlight 8.1 a Windows Phone 8.1, na co si dát pozor při upgrade existujícího projektu a také jaký projekt zvolit v různých situacích.

Silverlight 8.1 vs Windows Phone 8.1, o co tu vlastně jde?

Při uvedení operačního systému Windows Phone 8.1 představil Microsoft ne jeden, ale hned dva nové typy projektů v C#:

První pojmenovaný „Windows Phone Silverlight 8.1“, zkráceně jen Silverlight 8.1, je dáa se říct následníkem předchozích generací Windows Phone projektů, které mají kořeny v platformě Silverlight. Právě z této platformy převzal původní systém WP7, WP7.5 a WP8 většinu API třeba pro přistup k vláknům a souborovému systému, ale také i omezení třeba v možnostech práce v XAML.

Silverlight 8.1 rozšiřuje možnosti WP8 o velké množství nového API především z tzv. Windows Runtime, které bylo dříve dostupné jen ve Windows 8.1. Seznam veškerého nového API dostupného v Silverlight 8.1 je na webu MSDN. V Silverlightu 8.1 je ale ponecháno i prakticky skoro vše, co do teď fungovalo i ve WP8, takže pokud jste zvyklí používat v kódu třeba IsolatedStorageFile.GetUserStoreForApplication(), nebo API z XNA Frameworku Guide.BeginShowMessageBox(), bude toto API fungovat i ve vaší nové Silverlight 8.1 aplikaci. Stejně tak klasické třídy používané v XAML jako Pivot, Panorama, LongListSelector a WebBrowser – stále jsou dostupné i nyní. Na první pohled je to přesně to, co jsme čekali u WP8.1 SDK, ale k čemu je tu tedy druhý typ projektu a který je „lepší“?

Druhý nový typ projektu je jednoduše nazvaný „Windows Phone 8.1“. Ač je název tohoto typu projektu velmi podobný předchozímu WP8, ve skutečnosti má s předchozím WP8 jen málo společného. Nový Windows Phone 8.1 je defakto klonem desktopové platformy Windows 8.1 s jen drobnými rozdíly pro telefony – na telefonu třeba nemá smysl mít API pro tisk dokumentů a na PC zase API pro telefonování. Je zde ale důležité zmínit, že Windows Phone 8.1 již neobsahuje NIC z původního telefonního Silverlight či XNA API. Ve Windows Phone 8.1 již není dostupné IsolatedStorageFile, ani Guide, Panorama, LongListSelector či WebBrowser. Jako alternativy je teď třeba používat třídy známé z Windows 8.1: StorageFolder a StorageFile (které již částečně fungovaly ve WP8), ListView, GridView, FlipView, WebView a SemanticZoom.

Pokud při současném vývoji aplikace pro WP8 a Windows 8.1 šlo sdílet cca 50% aplikační logiky a minimum grafických prvků, mezi WP8.1 a Windows 8.1 již půjde sdílet cca 95% kódu včetně vlastních UserControls, ale i celých stránek, a to je také ten hlavní rozdíl, proč Microsoft přišel s touto druhou platformou – umožnit vývojářům napsat kód jednou a zkompilovat ho jen s drobnými změnami pro obě platformy.

Tolik tedy v pár odstavcích hlavní rozdíl mezi těmi platformami, stále ještě ale nebyla zodpovězena otázka který z těchto projektů je „lepší“ a který mám použít pro svojí aplikaci? Odpověď kupodivu není jednoduchá a hodně záleží na tom, jakou aplikaci chcete vytvořit. Neplatí zde totiž, že vše, co lze napsat v Silverlight 8.1 lze i napsat ve Windows Phone 8.1 či naopak. Žádná z těchto platforem není nadmnožinou té druhé.

Výhody platformy Silverlight 8.1

  • funguje zde téměř veškeré API, co je dostupné ve WP8
  • snadné použití pro existující Windows Phone vývojáře
  • snadná migrace existujícího projektu z WP8
  • drtivá většina knihoven pro WP8 funguje i ve WP8.1

V Silverlight 8.1 lze použít mnohé API, které zatím(?) není dostupné v novém Windows Phone 8.1:

  • Clipboard API – možnost uložit data do schránky
  • Lock screen image provider – možnost měnit obrázek na zamčené obrazovce
  • Ringtone provider – možnost ukládat vyzvánění do telefonu
  • Alarms + Reminders – možnost vytvářet nativní budíky a připomínky v aplikaci
  • Lens apps – možnost psát „fotoaplikace“, které lze spustit přímo z Fotoaparátu
  • Běh aplikace pod zamčenou obrazovkou
  • Běh geolokační aplikace na pozadí
  • FMRadio API pro pouštění rádia v aplikaci
  • Microsoft.Expression.* třídy s grafickými prvky
  • RadialGradientBrush není dostupný ve WP8.1 projektu

Výhody nové platformy Windows Phone 8.1

  • Mnohem větší shoda API s Windows 8.1
  • Snadný vývoj, pokud již vývojář zná Windows 8.1
  • Je možné, že WP Silverlight již nebude dostupný v další verzi systému Windows Phone. Již nyní je Silverlight 8.1 označován jako „legacy“. Projekt typu Windows Phone 8.1 založený na Windows Runtime skoro jistě bude podporovaný i v další verzi systému Windows Phone.

Některé API je dostupné jen ve Windows Phone 8.1 a ne v Silverlight 8.1:

  • Možnost přehrávat hudbu na pozadí (to momentálně v SL8.1 nefunguje, pravděpodobně to bude opravenu v updatu)
  • Nový systém lokalizace aplikací – MRT
  • Media editing API – možnost editace videí v aplikaci
  • Podpora nových profilovacích a ladících nástrojů
  • Možnost psát automatické UI testy
  • Nový CommandBar který podporuje plně databinding

Jak na upgrade WP8 projektu na Silverlight 8.1

Visual Studio 2013 s Update 2 umožňuje upgradovat existující WP8 projekty na platformu Silverlight 8.1. Na rozdíl od spuštění aplikace zkompilované pro WP8 na telefonu s WP8.1, kde je zajištěna 100% binární kompatibilita, aplikace povýšená na Silverlight 8.1 může mít drobné problémy.

Podrobná dokumentace rozdílů runtime u Silverlight 8.1 je dostupná na stránkách MSDN.

Na co si tedy dát především pozor po upgradu vaší existující aplikace na Silverlight 8.1:

  • Všechny Silverlight 8.1 aplikace používají ve výchozím nastavení Resume, namísto Relaunch po kliknutí na ikonu aplikace. Ve WP8 to bylo naopak. I v Silverlight 8.1 to lze ale změnit v manifestu.
  • Není podporovaný běh aplikace na pozadí, po upgrade tedy taková aplikace nebude fungovat správně.
  • Background Agent nyní ve výchozím stavu může dostat méně času na běh. Více času je možné vyžádat pomocí RequestAccessAsync()
  • AudioPlayerAgent, AudioStreamingAgent a WalletAgent není podporovaný v Silverlight 8.1
  • Pro přístup ke složce s obrázky z fotoaparátu je nyní třeba zaškrtnout novou capability „Pictures Library“ v manifestu aplikace.
  • U metody WaitForPendingFinalizers() není zaručeno, že skončí, pokud je pouštěna v Silverlight 8.1 aplikaci.

Některé ze změn u Common Language Runtime (CLR) u Silverlight 8.1

  • Parsování DateTime je nyní více spolehlivé a tak pokud aplikace očekávala výjimku na určitém formátu ve WP8, v SL8.1 již parsování projde a teoreticky to tak může vést k nečekanému chování.
  • Uri konstruktor nyní podporuje nová Uri schémata známá z Windows 8.1 a Uri.ToString si nyní lépe poradí s kódovanými Uri.
  • Sort() nyní používá namísto Quicksortu introspektivní třídění, které nezajišťuje stabilitu pořadí stejných prvků při třídění.

Jaký použít typ projektu?

Následuje krátký výčet nejčastějších scénářů, na které je možné narazit, pokud chce vývojář vyvíjet aplikaci pro WP8.1:

Máte existující WP7.5 nebo WP8 aplikaci,chcete využít nové dostupné API a nechcete přepisovat skoro celý kód?

  • Upgradujte jí na Silverlight 8.1

Chcete začít vyvíjet pro Windows Phone, moc vás nezajímá podpora WP8 a uvažujete případně i o možnosti vyvíjet tzv. Univerzální aplikace i pro Windows 8.1?

  • Založte si projekt typu Windows Phone 8.1, nebo Univerzální aplikaci.

Nikdy jste dosud pro Windows Phone nevyvíjeli a chcete pokud možno podporovat majoritní verzi Windows Phone?

  • Pokud chcete podporovat co nejvíce zařízení, je lepší nevyvíjet rovnou pro WP8.1. Založte si projekt typu WP8, který se nyní jmenuje Windows Phone Silverlight 8.0. Později jej budete moci povýšit na Silverlight 8.1 a přidat možnosti nového API.

Máte existující Windows 8.1 aplikaci a chcete snadno vytvořit Windows Phone verzi?

  • Nechte si projekt ve Visual Studio převést na tzv. Univerzální aplikaci. Visual Studio vám přidá nový projekt pro Windows Phone 8.1 a extra projekt pro sdílení kódu mezi oběma platformami.

Chcete vytvořit novou Windows Phone aplikaci, ve které požadujete API pro lockscreen, clipboard, lens app, FMRadio, alarmy či remindery?

  • Založte si nový projekt typu Silverlight 8.0 či 8.1. Windows Phone 8.1 zde bohužel nelze použít, protože tyto API jsou zatím podporované jen v Silverlight 8.0 a 8.1. 

Závěrečné shrnutí

Rozdíl mezi platformami Silverlight 8.1 a Windows Phone 8.1 považuji jako jednu z nejdůležitějších informací, kterou by měl znát každý vývojář, který uvažuje o vývoji pro operační systém Windows Phone 8.1. Pokud tento rozdíl vývojář znát nebude, snadno omylem vytvoří špatný typ projektu a bude se velmi brzo divit, proč nemůže najít objekty, které jsou popisované v návodech na Internetu. Proč mu nefungují ukázky kódu, které si stáhl. Proč mu třeba nefunguje změna obrázku na lockscreenu, která funguje jen v Silverlight 8.1. Proč mu nejde sdílet kód s Windows 8.1 aplikací apod. 

V dalším díle miniseriálu o vývoji pro Windows Phone 8.1 se zaměříme na nové Univerzální aplikace, jaké jsou jejich výhody a omezení, a co můžeme třeba očekávat do budoucna?

Mezitím, pokud vás zajímají detaily o Silverlight 8.1 přímo z první ruky, doporučuji shlédnout video ze session na Build konferenci, které se Silverlight 8.1 věnovalo. 

Autorem článku je Martin Suchan, Windows Phone vývojář ve společnosti Seznam.cz a Microsoft MVP

Martin Suchan

4 komentáře

  1. er.nest (neregistrovaný)

    Martine, moc hezke nahlednuti pod poklicku…snad i pro to většinu vyvojove nepozitivnich, co nebyli prilepeni na zivem streamu z Buildu :-) Zrovna tady pisu jednu WPF aplikaci, která bude pro desktopy ale v odnozy i pro tablety (klasicka lehce nudna profesni zalezitost),…tak se po precteni clanku opet jednou nemohu dočkat az si trosku zaexperimentuju s prevodem na Universal App a WP App… skoda, ze ty experimenty clovek odklada dle hesla „az dodelam tuhle featuru a bude vice casu“ coz je lehce rekurzivni fraze ;-)

  2. Broody (neregistrovaný)

    „Všechny Silverlight 8.1 aplikace používají ve výchozím nastavení Resume, namísto Relaunch po kliknutí na ikonu aplikace. Ve WP8 to bylo naopak. I v Silverlight 8.1 to lze ale změnit v manifestu.“

    Smím se zeptat, jak toho docílit? Zkoušel jsem upgradované WP 8.0 -> WPS 8.1 aplikaci nastavit ActivationPolicy=“Replace“, ale pořád se to chová jako „Resume“, což ji úplně rozbije :-(. Navíc na odkazovaném webu MS se změnami se píše: „A Silverlight 8.1 app is always resumed when launched, instead of replacing any running instance.“ Možnost přepnout to na starý režim není zmíněna nikde…

  3. fscz (neregistrovaný)

    Ahoj Martine, a jaký postup bys doporučil v následující situaci?

    Mám aplikaci pro WP7.5 a rád bych z ní udělal (s co nejmenším úsilím) universálni aplikaci, tj. aby běžela pod WP8.1 i W8.1. Aplikace pro WP7.5 se při otevření ve Visual Studiu 2013 automaticky upgraduje na Windows Phone Silverlight 8. Mám ji ještě manuálně „Retarget to Windows Phone 8.1“ – to bude klasická nebo Silverlight verze?

    • Igor Kulman (neregistrovaný)

      Vykašli sa na universal app, je to viac námahy ako úžitku. Logiku si vypreparuj do PCL a pridaj Windows 8 app (8.1 sa ti neoplatí, ledva polovica ľudí s 8 upgradovala na 8.1), ktorá bude taktiež používať dané PCL. Takže vo výsledku WP75 + PCL + Win8 ako najrýchlejšie a najjednoduchšie riešenie

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *