Allgemein Für Administratoren Für Architekten Für Entwickler Für Projektleiter Für Tester News Produkte Publikationen
X
Florian Bader

Florian Bader

HoloLens: Automatisierter Build

Dienstag, 04. Oktober 2016

Wer seine HoloLens-App im Source Control hat, der möchte diese natürlich auch irgendwann zentral kompilieren. Dadurch wird nicht nur sichergestellt, dass der Source Code überall kompilierbar ist, sondern es gibt auch eine zentrale Stelle, an dem das UWP-Paket erstellt wird, welches später im Marketplace veröffentlicht oder direkt auf der HoloLens installiert werden kann. In diesem Teil der Blogserie soll beschrieben werden, was benötigt wird, um automatisiert aus einem Unity-Projekt ein UWP-App-Paket zu bauen.

Wie bereits im Beitrag App unter Source Control beschrieben, sollte nur das Unity-Projekt eingecheckt werden, da das Visual Studio Projekt aus Unity generiert wird. Dadurch ist der erste Schritt, um zu einem UWP-App-Paket zu kommen, aus einem Unity-Projekt ein Visual Studio Projekt zu generieren. In Unity ist dies über die Build Settings möglich, in dem für verschiedene Plattformen ein Build angestoßen werden kann. Um diesen Build außerhalb des Editors zu starten, gibt es in Unity verschiedene Unity Command Line Parameter. Dadurch können auf verschiedene Aktionen des Unity-Editors zugegriffen werden, ohne das die Oberfläche des Editors gestartet werden muss. Eine dieser Aktionen ist das Ausführen einer statischen Methode eines Unity C#-Skripts. Unity bietet in C#-Skripten die Möglichkeit, auf Editorfunktionalität zuzugreifen. Dadurch kann über ein C#-Skript die Editorfunktion zum Bauen des Projekts aufgerufen werden.

Um ein neues C#-Skript für den Build anzulegen, legen wir zuerst einen neuen Ordner mit dem Namen Editor an, unter dem alle relevanten Skripte liegen, die auf Editorfunktionalität zugreifen (Rechtsklick Create –> Folder). In diesem Ordner erstellen wir nun unser C#-Skript mit dem Namen BuildScript (Rechtsklick Create –> C# Script).

image

Assets mit C# Build Script

Um den Build zu starten, bietet Unity zwei statische Klassen an: EditorUserBuildSettings und BuildPipeline. Die Editor User Build Settings bieten die Einstellungen, die auch in den Build Settings in Unity konfiguriert werden können. So können wir das aktuelle Build Target auf Windows Store setzen (WSA steht in diesem Fall für eine Windows Store Application), das entsprechende SDK auf UWP und den Buildtyp auf DirectX (D3D) ändern.

Die Klasse BuildPipeline kompiliert dann über die Methode BuildPlayer die ausgewählten Szenen in den angegebenen Ordner. Wer alle Szenen in Unity kompilieren möchte, kann auf diese wiederum in den EditorBuildSettings zugreifen und somit alle Szenen des Projekts an die BuildPipeline übergeben.

 

image
Unity Build Script (Source Code)
Zum Aufrufen des Buildskripts werden folgende Command Line Parameter verwendet:

Unity.exe –quit –batchmode –nographics –logFile editor.log –projectPath /path/to/project/ –executeMethod BuildScript.Build

Diese Parameter bewirken folgendes:

-quit
Schließt Unity, sobald die Funktion durchgeführt wurde.

-batchmode
Der Batchmode teilt Unity mit, dass die Oberfläche nicht geladen werden soll und alles auf der Command Line ausgeführt wird.

-nographics
Ermöglicht es Unity-Projekte ohne GPU zu kompilieren. Dies ist sinnvoll, da nicht alle Buildserver unbedingt eine GPU haben.

-logFile editor.log
Protokollnachrichten von Unity werden nur in einem minimalen Format in die Konsole protokolliert. Das ausführliche Protokoll wird in die angegeben Logdatei mitgeschrieben.

-projectPath /path/to/project/
Gibt den Pfad zum Unity-Projekt an.

-executeMethod BuildScript.Build
Führt die angegebene statische Methode aus.

Wird das Buildskript aufgerufen, so erstellt Unity im Hintergrund das Visual Studio Projekt der UWP-App, welches wir verwenden können, um das UWP-App-Paket zu bauen. Da innerhalb des Visual Studio Projekts die Unity-Referenzen über NuGet-Pakete eingebunden werden, müssen diese vorher wiederhergestelt werden. Danach kann über MSBuild das Appx-Package erstellt werden, welches wir dann wiederrum direkt auf der HoloLens über das Device Portal installieren oder über den Marketplace veröffentlichen können.

Diese Schritte sollen nun als vNext Build Definition in den TFS übernommen werden, um so über diese automatisch aus dem Unity-Projekt das UWP-App-Paket zu kompilieren.

TFS vNext Build Definition

Damit wir die HoloLens-App auf einem Build-Agent bauen können, sind natürlich einige Vorraussetzungen zu erfüllen. So müssen auf dem Build-Agent die gleichen Tools installiert sein, die auch zum lokalen Entwickeln benötigt werden (abgesehen vom HoloLens Emulator). Dies umfasst Unity sowie Visual Studio 2015 Update 3 mit den entsprechenden UWP-Tools (siehe HoloLens Tools).

Die einzelnen Schritte der vNext Build Definition sind wie folgt:
  1. Powershell: Kompiliert das Unity-Projekt und gibt gleichzeitig die Logdatei aus
    Source Code
  2. NuGet Installer: Installiert die Unity NuGet-Pakete
    Path to solution or packages.config:
    **\app\**\project.json
  3. Visual Studio Build: Kompiliert die Visual Studio Solution und erstellt das UWP-App-Paket
    Solution:
    **\app\*.sln

    MSBuild arguments:
    /p:AppxBundlePlatforms="$(BuildPlatform)" /p:AppxPackageDir="$(Build.BinariesDirectory)\AppxPackages\\" /p:AppxBundle=Always

  4. Publish Build Artifact: Hängt das UWP-App-Paket als Artifakt an das Buildergebnis an

    Path to Publish:
    $(Build.BinariesDirectory)\AppxPackages


image
TFS vNext Build Definition für Galaxy Explorer

Fehler bei Publish

error APPX3210: App manifest references the image ‘Assets\Logo.png’ which does not have a candidate in main app package.

Das Store Logo von UWP-Apps muss in unterschiedlichen Größen/ Skalierungen vorliegen. Dabei ist die Standard-Skalierung eines UWP Store Logos 200% (100×100 Pixel) und muss innerhalb von Unity gesetzt werden (siehe MSDN Blog). Wenn das Logo in der Standard-Skalierung nicht vorliegt, so erscheint beim Publish bzw. Builden des App Package die oben genannte Fehlermeldung.

Zum Setzen des Store Logos in Unity müssen die Player Settings geändert werden. Diese findet man unter File –> Build Settings, dann auf die Platform Windows Store klicken und auf Player Settings. Im Fenster Inspector befinden sich nun unter Store Logo die verschiedenen Größen. In diesem Fall muss das entsprechende Logo vorher den Assets hinzugefügt werden und kann dann über Select ausgewählt werden.

 

image
Setzen des Store Logos in Unity

 

Verwandte Artikel:

Benötigen Sie Unterstützung bei der Software-Entwicklung und Architektur von .NET basierten Lösungen oder bei Einführung und Anpassung von Visual Studio / Microsoft Test Manager / Team Foundation Server?

Wir stehen Ihnen unter info(at)aitgmbh.de gerne zur Verfügung.

Tags: ,

Hinterlasse eine Antwort