Connect(); 2016

Band 31, Nummer 12

Connect(); Mobile DevOps: Rundgang durch Visual Studio Mobile Center

Von Thomas Dohmke; 2016

Mobile Geräte bilden jetzt den Mittelpunkt des technologischen Ökosystems. Viele Menschen haben das Gefühl, ohne ihre Smartphones, Tablets und Laptops nicht leben zu können, und verwenden sie sowohl beruflich als auch im Privatleben. Die Geschäftswelt reagiert darauf, und jedes Unternehmen strebt heute danach, sich zu einem mobilen Unternehmen umzugestalten. Um dabei Erfolg zu haben und Gewinn zu erwirtschaften, müssen Unternehmen nicht nur eine mobile App sondern eine mobile Strategie mit vielen mobilen Apps unterstützen. Dies wurde als „Appifizierung“ der modernen Geschäftswelt bezeichnet – der massenhaften Verbreitung von zielgerichteten, stark optimierten Apps, die für eine bestimmte Gruppe von Benutzern oder für bestimmte Aufgaben ausgelegt sind. In einer appifizierten Welt müssen Entwicklungsteams mehr Apps mit größerem Wert für die Kunden bereitstellen, während die mobilen Plattformen, auf denen diese Apps ausgeführt werden, sich ständig weiterentwickeln und die Zahl der Geräte ständig wächst. Die größten Apps sind auf mehr als 1 Milliarde Geräten mit Tausenden von Gerätekonfigurationen, unterschieden nach Kriterien wie Bildschirmgröße, Sprache, Gebietsschema oder Netzwerkanbieter, installiert.

Um dieser Herausforderung gerecht zu werden, bietet Microsoft eine End-to-End-Lösung an, die auf drei Säulen ruht: Mit Visual Studio und Xamarin können Sie mobile und Desktop-Apps für alle wichtigen Plattformen erstellen. Microsoft Azure bietet leistungsstarke und flexible Cloud Services, mit denen das Starten oder Erweitern von Infrastrukturressourcen und das Verwalten von Daten auf Server- und Clientoberflächen einfach wird. Schließlich hilft Ihnen der Mobile DevOps-Prozess beim Verwalten des Anwendungslebenszyklus und ermöglicht Ihnen, Integration, Tests, Auslieferung und Überwachung Ihrer App zu automatisieren. Die aktuelle Version dieses Mobile DevOps-Stapels besteht aus mehreren integrierten, ansonsten jedoch grundverschiedenen Tools, wie etwa Visual Studio Team Services (VSTS), Xamarin Test Cloud und Hockey­App. Microsoft hat aus dem Anbieten dieser Produkte in den letzten Jahren viel gelernt, darunter auch, wie Entwickler Mobile DevOps-Praktiken schneller und reibungsärmer übernehmen können.

In diesem Artikel kann ich voller Stolz die öffentliche Vorschau unseres Produkts ankündigen, das alle Funktionen auf einer einzelnen Plattform vereinigt: Visual Studio Mobile Center.

Der Lebenszyklus von mobilen Anwendungen

DevOps-Praktiken können niemals den gesamten Entwicklungsprozess abdecken, sie müssen aber auch nicht auf Gedeih oder Verderb befolgt werden. Ähnlich wie eine Sammlung von Befehlszeilentools kann jede Praxis eigenständig verwendet werden, die Kombination mehrerer Praktiken eröffnet jedoch zusätzliche Vorteile. Genau das bildet den Hintergrund, auf dem Mobile Center entwickelt wurde. Es beginnt mit einem benutzerfreundlichen Onboardingprozess, der einen auf APIs konzentrierten Entwurf beinhaltet, der es Ihnen ermöglicht, Mobile Center vollständig über die REST-API oder die Befehlszeilenschnittstelle (CLI) zu steuern. Jede Funktion löst ein bestimmtes Problem und kann eigenständig verwendet werden.

Mit Build können Sie aus Ihrem Quellcode aus einem beliebigen Git-Repository automatisch bei jedem Commit oder Push ein installierbares App-Paket erstellen. Besonders vorteilhaft ist, dass Sie zum Erstellen von iOS-Apps keinerlei Agents oder externe Computer bereitzustellen brauchen. Mobile Center kümmert sich darum und kompiliert Ihre iOS- und Android-Apps direkt aus dem Quellcode, ohne manuelles Setup Ihrerseits.

Nach dem Abschluss des Buildprozesses ist es sinnvoll, Tests auf echten Geräten auszuführen. Test Cloud bietet mehr als 400 einzigartige Gerätekonfigurationen zum Überprüfen des Verhaltens Ihrer App. Tests können in C# (UITest), Ruby (Calabash) oder Java (Appium) erstellt werden; sie werden nach einem erfolgreich abgeschlossenen Build automatisch ausgeführt.

Wenn alle Tests grün sind, muss Ihre App in die Hände von Testern gelangen – das ist genau die Leistung der Distribute-Funktion. Geben Sie einen Satz E-Mail-Adressen – die als Verteilergruppen bezeichnet werden – ein, und Ihre Benutzer können die App direkt auf ihren Smartphones installieren – ganz in der Weise, wie sie eine App aus dem App-Store herunterladen würden. Build, Test und Distribute arbeiten in Mobile Center nahtlos zusammen, daher erhält jeder Ihrer Codecommits den vollen Validierungsumfang. Und für keine dieser Testfunktionen ist irgendeine Änderung an Ihrem Code erforderlich.

Der nächste Schritt besteht darin, der App Überwachung hinzuzufügen. Gleich, ob es um automatisierte Tests, eine Demo für einen Kunden oder die Veröffentlichung eines neuen Releases im App Store geht, die Sammlung von Nutzungs- und Diagnosedaten ist für den Erfolg Ihrer App entscheidend. Wenn Sie das Mobile Center-SDK hinzufügen, können Sie Abstürze sammeln und Analysefunktionen nutzen, um Qualitätsprobleme zu bewerten, erfahren, wie und wo Kunden Ihre App verwenden und letztlich Bewertungen und Rezensionen verbessern, indem Sie auf ihre Anfragen reagieren.

Das SDK aktiviert darüber hinaus zwei weitere Funktionen : Identität und Tabellen. Identität ist das schnellste Verfahren zum Authentifizieren der Benutzer Ihrer App mithilfe ihres Google-, Facebook-, Twitter- oder Microsoft-Kontos. Mithilfe von Tabellen können Sie einen Cloudspeicher zum Anzeigen, Hinzufügen oder Ändern von App-Daten erstellen – auch, wenn keine Netzwerkverbindung besteht.

Abbildung 1 zeigt, wie diese Funktionen den Lebenszyklus von mobilen Anwendungen aktivieren.

Der Lebenszyklus von mobilen Anwendungen mit Visual Studio Mobile Center
Abbildung 1 Der Lebenszyklus von mobilen Anwendungen mit Visual Studio Mobile Center

Erste Schritte

Das Registrieren für Mobile Center ist wirklich einfach. Wenn Sie bereits über ein HockeyApp-Konto verfügen, werden Ihre vorhandene E-Mail-Adresse und das Kennwort auch weiterhin zwischen beiden Systemen synchronisiert. Andernfalls könnten Sie ein neues Konto mithilfe des Registrierungsformulars erstellen, aber stattdessen möchte ich Ihnen den schnellsten Workflow für den Einstieg zeigen: Stellen Sie eine Verbindung mit GitHub her. Wenn Sie so viel Lebenszeit auf GitHub verbringen wie ich, müssen Sie Ihr GitHub-Kennwort nicht eingeben – Sie gelangen gleich zur in Abbildung 2 dargestellten Authentifizierungsseite. Genehmigen Sie einfach den Zugriff, dann landen Sie mit einem vollständig aktivierten Konto auf dem Mobile Center-Dashboard. Es sind weder E-Mail-Bestätigung, Angabe von Kreditkartendaten oder sonstige Setupschritte erforderlich.

Registrieren für Mobile Center mit GitHub
Abbildung 2 Registrieren für Mobile Center mit GitHub

Sobald Ihr Konto mit GitHub verbunden ist, trennen Sie nur noch ein paar Schritte von Ihrem ersten Build. Erstellen Sie Ihre App, indem Sie einfach den Namen eingeben, und wählen Sie dann im Menü „Build“ Ihr Git-Repository und den Branch aus, wie in Abbildung 3 gezeigt. Mobile Center erkennt Ihren Projekttyp automatisch, sodass Sie keine Buildschritte manuell hinzuzufügen oder zu konfigurieren brauchen. Hinter den Kulissen stellt die Buildpipeline einen virtuellen Computer zum Kompilieren der App bereit, führt alle Komponententests aus und signiert die App zur Verteilung.

Auswählen eines GitHub-Repositorys für Build
Abbildung 3 Auswählen eines GitHub-Repositorys für Build

Wenn der Buildprozess abgeschlossen ist, können Sie die App-Paketdatei für die lokale Installation herunterladen, mithilfe von Mobile Center Test automatische Tests ausführen oder mit der Distribute-Funktion fortfahren, um die App an Ihre Tester auszuliefern. Jedes Mitglied Ihrer Verteilergruppe empfängt eine E-Mail-Benachrichtigung zum Installieren der App. Öffnen Sie einfach die E-Mail auf dem Smartphone, und installieren Sie die App aus dem Browser.

Hinzufügen des SDKs

Für Abstürze und Analysen müssen Sie Ihrem Projekt das Mobile Center-SDK hinzufügen. Das SDK wurde mit einer modularen Architektur entworfen, die es Ihnen ermöglicht, nur die Funktionen zu integrieren, die Sie für Ihre App wünschen. Beginnen wir mit einem Beispiel für eine iOS-App. Fügen Sie zuerst oben in der AppDelegate.swift-Datei die folgenden Importanweisungen hinzu:

import MobileCenter
import MobileCenterCrashes
import MobileCenterAnalytics

MobileCenterCore ist für alle Funktionen erforderlich, während die anderen zwei ausgelassen werden können, wenn Sie die Absturz- oder Analysefunktionen nicht benötigen. Starten Sie dann in der Methode „didFinishLaunchingWithOptions“ das SDK:

MSMobileCenter.start("{Your App Secret}", withServics:[MSAnalytics.self,
  MSCrashes.self])

Das App-Geheimnis ist eine GUID, die aus der Verwaltungsseite der App in Mobile Center genommen werden kann. Statt diese vier Zeilen einzugeben, können Sie sie einfach aus der Übersichtsseite der App kopieren, wie in Abbildung 4 dargestellt.

Erste Schritte mit dem Mobile Center-SDK
Abbildung 4 Erste Schritte mit dem Mobile Center-SDK

Das Setup sieht unter Android sehr ähnlich aus:

import com.microsoft.azure.mobile.MobileCenter;
import com.microsoft.azure.mobile.crashes.Crashes;
import com.microsoft.azure.mobile.analytics.Analytics;
// ...
MobileCenter.start(getApplication(), "{Your App Secret}", Analytics.class,
  Crashes.class);

Durch Aktivieren des Crashes-Moduls beginnt das SDK, Ausnahmefehler unter iOS und Android sowie Low-Level-Abstürze unter iOS automatisch abzufangen. Um einen Testabsturz zu generieren, können Sie unter iOS einem Schaltflächenhandler die folgende Zeile hinzufügen:

MSCrashes.generateTestCrash()

Der gleiche Aufruf ist auch für Android verfügbar:

Crashes.generateTestCrash();

Nach einem Absturz speichert das SDK die Protokolldatei im lokalen Speicher des Geräts. Wenn der Benutzer die Anwendung wieder öffnet, werden alle ausstehenden Absturzprotokolle auf dem Mobile Center-Back-End veröffentlicht und dort verarbeitet. Wenn Sie Ihre iOS-App mit der Mobile Center Build-Funktion erstellen, wird die Stapelüberwachung im Absturzprotokoll automatisch mit Symbolen versehen, was bedeutet, dass alle Speicheradressen in Klassen- und Methodennamen, Dateinamen und Zeilennummern konvertiert werden. Wenn Sie einen anderen Buildserver verwendet oder Ihre iOS-App auf Ihrem lokalen Mac erstellt haben, sehen Sie die neuen Absturzprotokolle zuerst im Menü „Incoming“ (Eingehend). Sie können dann die passenden dSYM-Dateien hochladen, um den Vorgang der Symbolzuordnung zu starten.

Wenn Sie das Analytics-Modul aktivieren, verfolgt das SDK automatisch Sitzungen, Geräteeigenschaften wie die Betriebssystemversion, das Modell oder den Hersteller und Benutzereigenschaften wie Sprache oder Region nach, und Mobile Center zeigt sie auf der Seite „Audience“ (Zielgruppe) an (siehe Abbildung 5).

Mobile Analytics auf der Seite „Audience“ (Zielgruppe)
Abbildung 5 Mobile Analytics auf der Seite „Audience“ (Zielgruppe)

Sie können eigene benutzerdefinierte Ereignisse und Eigenschaften mithilfe der folgenden Zeile unter iOS nachverfolgen:

MSAnalytics.trackEvent("Video clicked",
  withProperties: ["FileName" : "RickRoll.mp4"])

Unter Android werden die Eigenschaften in einer HashMap angegeben:

Map<String,String>properties=new HashMap<String,String>();
properties.put("FileName", "RickRoll.mp4");
Analytics.trackEvent("Video clicked", properties);

Die gesamte Telemetrie, Abstürze, Ereignisse und Eigenschaften werden anonym gesammelt und sicher in der Azure Cloud gespeichert, wodurch Sie Vollzugriff auf die von Ihrer App gesammelten Daten erhalten. Um ein noch höheres Vertrauensniveau zu erreichen, wird das Mobile Center-SDK vollständig quelloffen bereitgestellt und ist auf github.com/Microsoft für iOS (/MobileCenter-SDK-iOS), Android (/MobileCenter-SDK-Android) und Xamarin (/MobileCenter-SDK-Xamarin) erhältlich. Ich fordere Sie ausdrücklich auf, seinen Quellcode durchzuarbeiten, Programmfehler zu verzeichnen und mithilfe von Pull Requests mitzuwirken.

Enthaltenes Back-End

Die meisten modernen Apps verwenden mindestens einen Onlinedienst, um ihr Leistungsvermögen zu realisieren, beispielsweise, um eine Aufgabenliste auf mehreren Geräten zu synchronisieren, Daten unter mehreren Branchenanwendungen zu teilen oder Funktionen auf authentifizierte Benutzer einzuschränken, die ein Premium-Abonnement erworben haben. Mobile Center unterstützt diese Szenarien durch direkte Integration in Azure App Service mithilfe der Tabellen- und Identitätsfunktionen.

Beim ersten Klicken auf eins dieser Menüelemente müssen Sie eine Verbindung mit Ihrem Azure-Abonnement herstellen. Wenn Sie noch nicht darüber verfügen, können Sie sich unter bit.ly/1MoL3Rb kostenlos für Azure registrieren. Sobald Ihr Azure-Konto mit Mobile Center verknüpft ist, können Sie Datentabellen direkt auf der Übersichtsseite „Tables“ (Tabellen) erstellen.

Als Beispiel erstelle ich eine Tabelle mit dem Namen „TodoItem“ für eine Aufgaben-App. Um auf die Daten in der Tabelle von einer iOS-App aus zuzugreifen, muss ich das SDK wie folgt initialisieren:

let client = MSClient(applicationURLString: "{Your App URL}")
let table = client.tableWithName("TodoItem")

Wie auch beim App-Geheimnis sollte die App-URL durch die URL für Ihre App von der Konfigurationsseite in Mobile Center ersetzt werden. Anschließend kann das MSTable-Objekt nach allen verfügbaren Elementen abgefragt werden:

table.readWithCompletion { (result, error) in
  if let err = error {
    print("ERROR ", err)
  } else if let items = result?.items {
    for item in items {
      print("Todo Item: ", item["text"])
    }
  }
}

Zum Filtern des Ergebnisses kann ich beispielsweise ein NSPredicate-Objekt und die readWithPredicate-Methode verwenden, um nur nicht abgeschlossene Aufgabenelemente zu erhalten:

let predicate = NSPredicate(format: "complete == NO")
table.readWithPredicate(predicate) { (result, error) in
  // Handle item
}

Das Einfügen eines neuen Elements erfolgt mithilfe eines NSDictionary-Objekts und der insert-Methode:

let newItem = ["text": "Write MSDN article", "complete": false]
table.insert(newItem) { (result, error) in
  if let err = error {
    print("ERROR ", err)
  } else if let item = result {
    print("New item ID: ", item["id"])
  }
}

Das Back-End für Azure App Service mobile generiert auf der Grundlage des Wörterbuchs automatisch neue Spalten, einschließlich einer eindeutigen ID. Ich kann auch meine eigene ID als Schlüssel-Wert-Paar im Wörterbuch angeben. Ähnlich wie insert ermöglichen die Methoden „update“ und „delete“ das Ändern, beispielsweise wenn ein Aufgabenelement abgeschlossen ist, und das Löschen von Daten. Und natürlich funktioniert das alles nicht nur für iOS-Apps, sondern für alle auf Mobile Center unterstützten Plattformen.

Mit dem bisher vorgestellten Code würden alle Benutzer der App übergreifend auf allen Geräten auf die gleiche Liste von Aufgabenelementen – oder allgemeiner: auf die gleichen Daten – zugreifen. Das ist in der Regel nicht erwünscht; normalerweise möchte jeder Benutzer seine eigene Aufgabenliste verwalten. Dies lässt sich erreichen, indem der App die Identity-Funktion hinzugefügt wird. Mobile Center unterstützt fünf vorkonfigurierte Identitätsanbieter: Azure Active Directory, Facebook, Google, Microsoft-Konto und Twitter. Eine App kann eine beliebige Anzahl dieser Identitätsanbieter verwenden, um Benutzern die Anmeldung mit ihrem bevorzugten Konto zu ermöglichen. Es bestehen zwei Optionen zur Integration der Funktion:

Mithilfe eines Anbieter-SDKs (z. B. des Facebook-SDKs) können sich Benutzer bei einer Oberfläche anmelden, die eng in das Betriebssystem integriert ist, unter dem die App ausgeführt wird. Im Rahmen des Anmeldeprozesses erhält die App ein Anbietertoken, das an Azure App Service zurückgesendet werden muss; dort erfolgt die Validierung des Tokens und sein Austausch durch ein neues App Service-Token. Die App kann aber das Anbietertoken auch für eigene Zwecke speichern, beispielsweise, um auf die Facebook Graph-API zuzugreifen.

Ohne Anbieter-SDK können Sie im Mobile Center-SDK die folgende Methode verwenden:

client.loginWithProvider("google", controller: self, animated: true) { (user, error) in
  // Load data
}

Dadurch öffnet sich eine Webansicht des Anbieters, und der Benutzer kann sich anmelden. Das Anbietertoken wird direkt serverseitig verarbeitet, und die App empfängt es zu keiner Zeit. Am Ende des Workflows verfügt das Mobile Center-SDK über ein App Service-Token, das automatisch an alle Back-End-Anforderungen angefügt wird und sicherstellt, dass der Zugriff auf die Daten der App nur durch den authentifizierten Benutzer erfolgen kann.

Blick in die Zukunft

Alle in diesem Artikel beschriebenen Funktionen stehen jetzt als öffentliche Vorschau für iOS- und Android-Entwickler zur Verfügung. Registrieren Sie sich kostenlos auf aka.ms/mobilecenter. Im Lauf der nächsten Monate stellt Microsoft fortlaufend weitere Funktionen und mehr Nutzwert bereit, darunter Unterstützung für Windows-Entwickler, Integration mit VSTS und weiteren Back-End-Diensten, wie Offline-Datensynchronisierung. Unser Ziel ist, dass Mobile Center zu Ihrer Anlaufstelle für mobile und Desktop-Apps wird, die alles aus einer Hand bietet: Erstellen, Testen, Verteilen, Überwachen und mit der Cloud verbinden. Mein Team und ich sind sehr begeistert von der nächsten Generation von Mobile DevOps von Microsoft, und wir hoffen, Sie werden uns auf dieser Reise begleiten.


Thomas Dohmke ist ein Mitbegründer von HockeyApp, das von Microsoft gegen Ende des Jahrs 2014 erworben wurde. Dohmke ist der Gruppenprogramm-Manager für Visual Studio Mobile Center und für die Fortentwicklung der Produktvision und das Verwalten der Programm-Managerteams für die einzelnen Funktionen zuständig. Sie erreichen ihn per E-Mail unter thdohmke@microsoft.com oder auf Twitter: @ashtom.