VSTS, Xamarin.Android a UI Testy

Visual Studio Team Services je vynikající služba pro kontinuální integraci, automatické buildy a testování. Práce s Xamarinem se nedávno mírně změnila, do jisté míry zjednodušila, ale na druhou stranu mírně přestala fungovat. Tohle jsou kroky, které ji zase zprovozní.

Rozkaz zní jasně:

  • proběhne build projektu Android aplikace, vznikne APK
  • proběhne build projektu UI testů
  • testy se pošlou na Xamarin Test Cloud
  • výsledné APK skončí ve složce drop

Výchozí šablona procesu „Xamarin.Android“ obsahuje všechny nutné kroky. Jenom momentálně (30. 11. 2016) nefungují. Je potřeba provést následující úpravy:

V kroku Build Xamarin.Android Project se nastaví napevno JDK verze 8.

image

V kroku Build solution **/*test*.csproj se do MSBuild Arguments doplní parametr:

/p:JavaSdkDirectory="C:/Program Files (x86)/Java/jdk1.8.0_102"

Oba kroky vedou k tomu, abychom se zbavili chyby s nízkou verzí API při kompilaci. Jenom MSBuild pro to nemá kolonku v UI a je potřeba ho instruovat v command line.

Ngrok – tunelujeme do localhostu

Jsou situace, kdy se hodí nabídnout svůj localhost na internetu. Třeba když vám na počítači běží chatbot a chcete ho přidat na Skype a otestovat ve skutečném klientovi. Nebo když si nejste jistí, zda mobilní emulátor správně komunikuje s lokální sítí.

V poslední době jsem si oblíbil Ngrok, nástroj, který dokáže takový tunel vykopat. Funguje velmi jednoduše – stáhnete si utilitku pro Windows, Linux nebo Mac, přidáte cestu k ní do PATH a pak jenom v příkazové řádce napíšete:

ngrok http 3678

image

Ngrok vám vygeneruje HTTP i HTTPS adresy a zajistí, že požadavek na ně se přes jeho servery protuneluje na localhost, na port 3678. Na obrázku je také vidět, jak se logují příchozí požadavky.

Tyto adresy nejsou perzistentní, takže jakmile Ngrok restartujete, dostanete nové. Stálé adresy jsou součástí placeného plánu.

Poznámka na konec: vyskakují-li v reakci na požadavky chyby jako „400 Bad Request“, nejspíš máte špatně nastavený Host Header. Řešení je prosté:

ngrok http [port] -host-header="localhost:[port]"

RSS v C#

Kdo si nenapsal vlastní RSS čtečku (nebo alespoň něco, co ji tak či onak připomíná), ať hodí kamenem. Kdysi jsem jednu takovou sofistikovanou čtečku zpráv vyráběl taky a prozíravě si z ní vydestiloval knihovničku (DLL, ne knížky), která obsahovala všechno potřebné: RssFeed, RssArticle a tak…

Continue reading

UWP: Nezobrazí se Share UI

Tenhle problém dokáže pěkně potrápit. V jedné aplikaci jsem generoval obrázek, spojoval ho s Inkem a následně přes Share contract nabízel ke sdílení třeba do mailové aplikace. V emulátoru i na skutečném telefonu všechno fungovalo, dokud byl připojený debugger, nicméně když jsem aplikaci spustil rovnou ze seznamu, Share UI se nezobrazilo a nevyskočila ani žádná chyba.

Continue reading

Tip: Černá obrazovka u Android emulátoru

Visual Studio nabízí super Android emulátor postavený na Hyper-V (on se tedy dá používat i samostatně, bez VS, ale s ním je to samozřejmě lepší :) ). Stala se mi ale po spuštění taková nemilá věc – místo Androidu se zobrazila jenom černá obrazovka. Virtuální stroj běžel, debug se taky připojil, ale nebylo nic vidět.

Nakonec pomohlo vypnout OpenGL v souboru C:\Program Files (x86)\Microsoft XDE\10.0.10586.0\SKUs\Android\xdesku, odstraněním atributu:

UWP: Ikona sdílení

Pokud implementujete Share Contract ve Windows 10 (konkrétně UWP), musíte sdílení nějakým způsobem vyvolat. Pokud si zvolíte tlačítko na panelu CommandBar, brzy zjistíte, že XAML přímo ikonu pro sdílení nenabízí („ReShare“ není ono). Nezbývá tedy než vyhrnout rukávy a zabrousit do fontu Segoe MDL2 Assets:

Ten totiž obsahuje spoustu zajímavých ikon, které se používají napříč Windows 10.

segoe-ui-mdl2

Tip: Jak vynutit schválení oprávnění pro Azure AD

Modelová situace: Používám webovou aplikaci, která volá API Microsoft Graph a čte data z Office 365. V Azure Active Directory si řekla o sadu oprávnění (třeba čtení a zápis mého kalendáře a e-mailové schránky) a já jsem je schválil při prvním přihlášení.

Za půl roku se API rozšířilo a přibylo nové oprávnění, třeba například čtení kalendářů místností. Autor aplikace jej v Azure Active Directory přidal, nicméně můj uživatelský profil s ním nepočítá – schválil jsem před půl rokem něco jiného.

Tato situace je běžná i při vývoji – měním postupně scope aplikace, přidávám nová oprávnění potřebuji testovat, jak se chovají, nechci pořád dokola odebírat aplikaci z AD a znovu ji přidávat.

Jak z toho ven?

Tento parametr stačí přidat k URL přihlašovací stránky Azure Active directory.

prompt-consent

Znovu stránku načíst, přihlásit se a objeví se nové „consent“ okno, kde už budou i nová oprávnění, která postupně do aplikace přibyla:

ad-opravneni Hotovo.

UWP – Jak zakázat zoomování WebView

Ovládací prvek WebView slouží k zobrazení webového obsahu uvnitř aplikace. Je potom jedno, zda používáte XAML a C# nebo HTML a JavaSciript, do WebView natáhnete webovou stránku a engine ji vykreslí.

Ve výchozím nastavení reaguje WebView na klasické zoomovací gesto „pinch“, kdy dvěma prsty od sebe nebo k sobě přibližujete, resp. oddalujete, vykreslený obsah. Co když ale chcete tuto možnost zakázat? WebView žádnou property, která by o zoomování rozhodovala, nemá, můžete ale upravit rovnou kód zobrazované stránky.

Přidejte do ní toto CSS:

Hotovo, WebView nyní nebude na „pinčování“ reagovat.

Testování Office add-inů na Macu

Doplňky Office už na Macu fungují. Co když ale chcete testovat aplikaci, kterou ještě nemáte ve Storu? Jde to, ale není to úpně intuitivní.

Microsoft minulý týden na Buildu oznámil, že doplňky Office fungují i v klientských aplikacích pro Mac OS. Uživatelé si tak mohou do svých Wordů, Excelů i PowerPointů instalovat doplňky z Office Storu, o nichž vývojáři prohlásili, že jsou připravené a funkční pro Mac. Aby to ale mohli s čistým svědomím udělat, musí je nejprve na jablečné platformě otestovat. Klasický sideloading přes sdílenou složku nebo app catalog, které známe z Windows, použít nejdou a nezbývá než se uchýlit k ruční práci.

Vezměte svůj soubor s manifestem (<cokoliv>.xml) a nahrajte ho do složky:

/Users/<username>/Library/Containers/com.microsoft.Word/Data/Documents/wef

Pokud wef neexistuje, je potřeba ji ručně vytvořit třeba pomocí mkdir.

A pak nakopírovat soubor třeba takto:

cp manifest.xml /Users/<username>/Library/Containers/com.microsoft.Word/Data/Documents/wef

Po spuštění Wordu (v tomto případě, pro Excel by se jenom v cestě nahradil název za com.microsoft.Excel) pak najdeme add-in v sekci „Developer Add-ins“.

image