Category: Zápisník

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.

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:

GuestDisplayProvider="VsEmulator.OpenGLGuestDisplay"

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:

<AppBarButton Label="Share" Click="Share_Click">
   <AppBarButton.Icon>
      <FontIcon FontFamily="Segoe MDL2 Assets" Glyph="&#xE72D;"/>
   </AppBarButton.Icon>
</AppBarButton>

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

segoe-ui-mdl2

Čistíme IIS Express

IIS Express je nepostradatelný nástroj pro vývoj a ladění webových aplikací – není třeba zprovozňovat lokální IIS server a nasazovat do něj desítky aplikací, které budou v mém případě stejně spuštěny jenom několikrát, prostě bašta. Než se to trochu zvrhne…

Včera jsem zjistil, že se mi u jednoho webu objevuje port, který ale nikde nastavený nemá. Chyba byla v tom, že IIS Express si nesl v konfiguraci sajtu z dřívějška, kterou jsem shodou okolností spouštěl ze stejného umístění a která měla trošku jinak nastavené adresy. Přišel čas na čistku.

IIS Express má u sebe nainstalovanou utilitku AppCmd.exe, která umí různé psí kusy – mimo jiné třeba vypsat seznam webů a také v nich mazat. Vzhůru do příkazové řádky:

cd C:\Program Files (x86)\IIS Express\
appcmd list sites /text:name

Tento příkaz vypíše jména všech webů, které jsou v IIS Express uložené.

image

appcmd delete site 'abc'

A tento smaže záznam webu „abc“.

image

Pokud bychom chtěli být sofistikovanější a použít modré okno PowerShellové, můžeme zkusit třeba tento skript:

$appCmd = "C:\Program Files (x86)\IIS Express\appcmd.exe"
$result = Invoke-Command -Command {& $appCmd 'list' 'sites' '/text:SITE.NAME' }
for ($i=0; $i -lt $result.length; $i++)
{
    Invoke-Command -Command {& $appCmd 'delete' 'site'  $result[$i] }
}

Ten pochází odtud a pro změnu smaže všechny uložené weby.

PowerShell–učíme Windows mluvit

Windows v sobě obsahují engine pro syntézu hlasu a když se tento propojí s možnostmi PowerShellu, může vzniknout třeba blbinka v podobě skriptu, jenž zahlásí, kolik baterky zařízení zbývá :)


function Speak([string]$str) {
Add-Type -AssemblyName System.Speech
$voice = New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.SelectVoice('Microsoft Zira Desktop')
$voice.Speak($str)
}


$percent = (Get-WmiObject win32_battery).estimatedChargeRemaining


$minutes = (Get-WmiObject win32_battery).estimatedRunTime
$span = (New-TimeSpan -Minutes $minutes).ToString()


Speak("You have $percent percent battery left.")

Jak povolit HTTPS na IIS Express?

Je to prosté, milý Watsone, stačí vědět, kam sáhnout. A protože jsem to nevěděl a už mám hlavu pomatenou komplexnostmi, hledal jsem to asi hodinu…

Properties webového projektu –> SSL Enabled –> True

image

Tohle přepínadlo zajistí, že se upraví patřičný konfigurák IIS Express (najdete ho ve složce C:\Users\<username>\Documents\IISExpress\config pod jménem applicationhost.config).

image