Der Apfel aus der Wolke

Cloud-Services zum Entwickeln und Testen von mobilen Apps

Dr. Veikko Krypczyk, Olena Bochkor

©Shutterstock / garagestock

Geräte- und plattformübergreifende Entwicklung ist angesagt, zum Beispiel mit Xamarin oder NativeScript. Möchte man Apps für mehrere Systeme erstellen, benötigt man die passende Systemumgebung aus Entwicklungsrechner und Testgeräten. Statt echter Hardware können Lösungen aus der Cloud helfen.

Software muss heute oft geräte- und plattformübergreifend funktionieren. Blicken wir auf Apps für die mobilen Geräte, sind in der Regel die Systeme iOS (Apple) und Android (Google) zu unterstützen. Auf dem Desktop sind es neben den unterschiedlichen Versionen von Microsoft Windows auch macOS und diverse Linux-Distributionen. Die Softwareentwicklung bedient sich daher oft so genannter geräte- oder plattformübergreifender Ansätze, um die System- und Gerätevielfalt in den Griff zu bekommen. Mit anderen Worten: Die Applikationen sollen für die unterschiedlichsten Systeme aus einer Quellcodebasis entstehen. Hier haben die Ansätze in der Vergangenheit deutliche Fortschritte gemacht, zu nennen sind zum Beispiel Xamarin, NativeScript und RAD Studio.

Dabei ist es notwendig, dass man die erstellte Software auf den Zielgeräten testet. Im Fall der Entwicklung für iOS ist es sogar notwendig, dass man während der Entwicklung auf einen Mac zugreifen kann. Nur mit Hilfe der Entwicklungsumgebung Xcode kann man die App-Packages erstellen und die zu erstellende App zum Beispiel in einem Simulator testen. Hat man bisher lediglich auf Windows-Systemen entwickelt oder soll nur gelegentlich für iOS oder macOS programmiert werden, kann sich dieser Umstand als eine größere Investitionshürde darstellen. Das gilt gerade dann, wenn man mehreren Entwicklungs- und Testarbeitsplätzen einen Zugang zu entsprechender Gerätetechnik ermöglichen muss. Eine ähnliche Situation zeigt sich auch bei Android-Systemen. Unzählige Gerätetypen und Versionen machen es den Testern immer schwieriger, die App zu testen. Es stellen sich wichtige Fragen: Funktioniert die App nur auf den physisch vorhandenen Testgeräten des Entwicklers oder kann die App auch auf anderen Geräten erfolgreich ausgeführt werden? Ist die Darstellung auf unterschiedlichen Größen und Auflösungen von Bildschirmen in Ordnung? Dabei ist die Vielfalt der Geräte sehr groß. Vom preiswerten Gerät mit einer eher geringen bis hin zu hochpreisigen Varianten mit Auflösungen von mehreren Millionen Pixeln reicht das Spektrum. Auch bezüglich der verwendeten Versionen der Betriebssysteme herrscht eine immer größer werdende Vielfalt. Neben der Hauptversion kommen sogenannte SDK-Versionen hinzu. Die spielen für den Anwender keine Rolle, aber bei der Entwicklung einer Android-App ist stets die minimale SDK-Version und das Ziel-SDK anzugeben. Im Quellcode muss man teilweise auf die vorhandene SDK-Version prüfen. Die bestimmt dann, ob bestimmte Funktionen verfügbar sind oder ob beispielsweise noch zusätzliche Berechtigungen angefordert werden müssen. Wir können auch nicht einfach davon ausgehen, dass die Nutzer eine aktuelle Version des Betriebssystems verwenden. Viele Hersteller von Smartphones und Tablets mit Android stellen keine Updates bereit oder liefern sie nur mit starker Verzögerung an die Kunden aus.

Aus dieser Situation muss man schlussfolgern, dass ein umfassendes Testen auf den unterschiedlichsten Geräten unerlässlich ist, um Fehler auf einzelnen Gerätekonfigurationen nachvollziehen und beheben zu können. Einen derart umfassenden Gerätepark kann man sich jedoch als Entwickler nicht zulegen und das wäre auch unwirtschaftlich. Abhilfe können Angebote aus der Cloud schaffen. Dabei werden über das Internet komplette Systeme zum Arbeiten, Entwickeln und Testen zur Verfügung gestellt.

Wir stellen in diesem Artikel drei Angebote im Überblick vor, mit denen wir bereits gearbeitet haben. Das sind: MacinCloud, App Center Test (Microsoft) und AWS Device Farm (Amazon). Nach einer kompakten Präsentation wenden wir uns der Praxis zu und werden die mögliche Verwendung demonstrieren. Bei diesen Cloud-Diensten handelt es sich um PaaS-Services. Dabei werden Systemumgebungen zur Verfügung gestellt, in denen man Anwendungen entwickeln und bereitstellen kann. Als Entwickler können Sie sich damit auf die eigentliche Umsetzung der Software konzentrieren, ohne sich Gedanken um die Einrichtung und Wartung der Infrastruktur machen zu müssen. Die Provider sind für das Management der Systeme zuständig. Das ist gerade in komplexer werdenden Systemumgebungen sinnvoll. Zahlreiche Versionen von Entwicklungs- und Testsystemen erhöhen zunehmend den administrativen Aufwand, der nur mühevoll aus den stets knappen Zeitbudgets für die Entwicklung „abgezweigt“ werden kann. Ebenso erleichtert Cloud-Computing die Zusammenarbeit von verteilt arbeitenden Teams, indem zum Beispiel Apps dezentral auf echten Geräten getestet werden können.
[smartblock id=150770]

Der Apfel aus der Wolke: MacinCloud

Das Angebot MacinCloud [1] richtet sich primär an Softwareentwickler, die die Infrastruktur zum Entwickeln und Testen für iOS- und macOS-Apps über die Cloud nutzen möchten. Aus den unterschiedlichen Angeboten kann man sich den individuellen Mac als Service auswählen. Zur Verfügung stehen zum Beispiel folgende Service- bzw. Bezahloptionen: Pay-As-You-Go, Managed Server, Dedicated Server und Azure Agent. Die jeweils gebotenen Features findet man unter [1] dokumentiert.

Server und virtuelle Maschinen von MacinCloud haben die typische Software installiert, die man zum Beispiel für die Entwicklung von mobilen Apps für iOS benötigt. Dazu gehören zum Beispiel Xcode, Visual Studio for Mac und weitere Tools. Im nächsten Schritt wollen wir das ausprobieren. Sie können die Angebote von MacinCloud relativ einfach testen. Erstellen Sie ein kostenfreies Konto beim Anbieter und wählen Sie ein Bezahlmodell, zum Beispiel Pay-As-You-Go. Konfigurieren Sie Ihren virtuellen Mac. Als Ergebnis erhalten Sie Zugriff auf vorkonfigurierte Dateien für den Zugriff über das Programm Remotedesktop (Microsoft Windows). Über den Remotedesktop können Sie mit dem Mac arbeiten, als ob Sie vor einem physischen Gerät sitzen würden. Sofern Ihre Internetverbindung ausreichend performant ist, dürfte es keine Probleme geben. Da man über die statische IP-Adresse des Macs verfügt, kann man ihn in der Praxis weitgehend so verwenden, als ob er im eigenen lokalen Netzwerk integriert wäre. Beispielsweise kann man die App-Packages beim Erstellen einer mobilen App für iOS auf den Simulator in der Cloud deployen und dann auf diese Weise die App testen. Über den Remotedesktop sieht man dann das Ergebnis als Livebild (Abb. 1). MacinCloud bietet auch die Möglichkeit, das Bild mit einer Auflösung von 4K auf den eigenen Rechner zu übertragen. Voraussetzungen für dieses optionale Angebot sind ein geeigneter Bildschirm und eine ausreichend schnelle Internetverbindung.

Abb. 1: Remotezugriff auf Mac in der Cloud

Abb. 1: Remotezugriff auf Mac in der Cloud

Visual Studio App Center Test

App Center Test ist ein Testautomatisierungsdienst für native und hybride Mobile-Apps, auch als Test-Cloud bekannt. Es ist Teil des Visual Studio App Centers [2]. Die Tests werden auf echten Geräten ausgeführt (Abb. 2).

Abb. 2: Auswahl der Geräte in der Test-Cloud des Visual Studio App Centers

Abb. 2: Auswahl der Geräte in der Test-Cloud des Visual Studio App Centers

Eine Liste der verfügbaren Devices findet sich unter [3]. Sie laufen im Microsoft-Rechenzentrum. Die Testläufe werden über die App-Center-Befehlszeilenschnittstelle oder das öffentliche REST API initiiert. Folgende Entwicklungsumgebungen werden von der Test-Cloud unterstützt: Appium (Java mit JUnit) für Android und iOS, Espresso (Java) für Android, Calabash für Android und iOS, Xamarin.UITest für Android und iOS und XCUITest für iOS. Wir sehen hier, dass Microsoft sich nicht nur auf die eigenen Technologien konzentriert. Das ginge im mobilen Umfeld auch gar nicht, nachdem Windows 10 Mobile keine Rolle mehr spielt.

Welche Dinge kann man schlecht oder gar nicht über gehostete Geräte in der Cloud testen? Bestimmte Netzwerkprobleme, das Vorhandensein oder Abbrechen einer Mobilfunkverbindung und Lasttests sind nicht möglich. Hier müssen Sie weiterhin auf physische Geräte vor Ort setzen. Wie Sie das Test Center nutzen können (Schrittfolge) finden Sie unter [4] dokumentiert.

An dieser Stelle ist nochmal der Hinweis wichtig, dass die Test-Cloud für Apps ein Teil des Angebots Visual Studio App Centers ist. Das befindet sich noch teilweise im Aufbau und soll ehemalige, bestehende und künftige Funktionen aus dem Azure-Portal bündeln. Dazu gehören die Funktionen Build, Test, Distribution, Authentifizierung, Datenspeicherung, Pushnachrichten und Diagnose (Absturzverhalten) für Mobile-Apps.

Sollten Sie die gewünschte Funktion im Visual Studio App Center Test (noch) nicht finden, dann ist sie i. d. R. noch Bestandteil des normalen Azure-Portfolios. Hier kann man nur hoffen, dass Microsoft noch weiter aufräumt.

AWS Device Farm

Die AWS Device Farm [5] ist ein Service zum Testen von Anwendungen für Web- und Mobile-Applikationen. Die App kann auf einer Vielzahl von echten Geräten in der Cloud ausgeführt werden. Zum Zeitpunkt der Erstellung dieses Artikels (Februar 2020) waren es 246 Geräte. Darunter befinden sich eigentlich alle typischen Smartphones und Tablets mit Android bzw. iOS als Betriebssystem. In der Dokumentation findet man neben dem Namen des Gerätes auch die zugehörige Modellbezeichnung, die Version des Betriebssystems sowie die Angaben zur Auflösung (Breite und Höhe). Für Android-Geräte ist darüber hinaus die SDK-Version angegeben. Auf diese Weise ist eine sehr feinabgestimmte Auswahl der Geräte möglich. Im Falle eines Fehlers lässt sich dann gut nachvollziehen, auf welchen Gerätetypen und unter welchen Versionen des Betriebssystems der Fehler auftritt. Protokolle, Screenshots, Videos und weitere Rückmeldungen von den echten Geräten erlauben es, die Lauffähigkeit der App auf den mobilen Geräten zu beurteilen. Entsprechende Test-Frameworks können eingebunden werden. Auf bestimmte Geräte kann remote zugegriffen werden, d. h., man kann direkt über den Webbrowser auf den Geräten herumtippen und -wischen. Die Nutzungsgebühren kann man unter [6] einsehen. Im Folgenden beschreiben wir die Arbeit mit der AWS Device Farm und zeigen an einem einfachen Beispiel, wie man eine eigene App in der Cloud testet. Erstellen Sie dazu ein Konto. Im nächsten Schritt wählen wir die Option Nutzungsabhängige Zahlung und hinterlegen die Kreditkartendaten. Erstellen Sie ein neues Projekt zum Testen einer mobilen App (Abb. 3).

Abb. 3: Anlegen eines neuen Projekts in der AWS Device Farm

Abb. 3: Anlegen eines neuen Projekts in der AWS Device Farm

Im nächsten Schritt werden Sie aufgefordert, ein App-Package für Android bzw. iOS zur Verfügung zu stellen. Laden Sie eins hoch, für Android ist es zum Beispiel eine .apk-Datei. Für einen ersten Test verwenden wir das App-Package einer einfachen Hello-World-Anwendung. Das Hochladen der Datei wird bestätigt und wir kommen zur Auswahl der Testgeräte. In diesem Fall sind es lediglich Android-Smartphones. In den weiteren Einstellungen kann man die mobilen Geräte konfigurieren bzw. Voreinstellungen vornehmen, zum Beispiel über den Zugriff auf die Ortungssensoren Geokoordinaten vorgeben. Starten Sie dann den Test. Die Ausführung beginnt unmittelbar auf den ausgewählten Geräten und für die Dauer der voreingestellten Zeit. Beachten Sie, dass sich die gesamte Nutzungszeit für die AWS Device Farm aus einer Multiplikation der Anzahl der verwendeten Geräte und der Nutzungszeit pro Gerät ergibt. Die verfügbaren 1 000 Freiminuten sind also bei einem umfassenden Test mit 100 Geräten in 10 Minuten aufgebraucht. Wir haben lediglich auf fünf Geräten getestet (Abb. 4).

Abb. 4: Die Ergebnisse des App-Tests werden angezeigt

Abb. 4: Die Ergebnisse des App-Tests werden angezeigt

Kurze Zeit später ist das Ergebnis für jedes einzelne Gerät verfügbar und kann über unterschiedliche Daten und Ansichten (Screenshots, Videos) ausgewertet werden. Man kann auf diese Weise zum Beispiel die Darstellung der Screens und ihrer Komponenten überprüfen.

Praxisprojekte und Erfahrungen

Im Folgenden betrachten wir den Einsatz von Cloud-Diensten für die Nutzung in Entwicklungs- und Testvorgänge für die Programmierung von Mobile-Apps. Dabei soll eine plattformübergreifende Strategie betrachtet werden. Eine solche Arbeitsumgebung umfasst i. d. R.

  • den Entwicklungsrechner mit der integrierten Entwicklungsumgebung, zum Beispiel Visual Studio, RAD Studio oder einem anderen Entwicklungswerkzeug. Diese Entwicklungsumgebung läuft häufig auf dem Betriebssystem Microsoft Windows.

  • Android-SDK und -Emulator, die auf allen gängigen Systemen installiert werden können, so auch unter Windows.

  • iOS-SDK und -Simulator, die man nur auf einem Mac mit aktuellem Betriebssystem ausführen kann. Voraussetzung ist ebenfalls eine Installation der integrierten Entwicklungsumgebung Xcode.

Physische Geräte für Android können Sie ohne Probleme an den Entwicklungsrechner mit beliebigem Betriebssystem anschließen. Für das Testen auf einen iPhone oder iPad ist dagegen ein Mac notwendig. Wird im Team gearbeitet, ist für die Entwicklungsphase zumindest regelmäßig der Zugriff auf Xcode unter macOS und einen Simulator für iOS Voraussetzung. Um die hohen Investitionskosten zu vermeiden, wurde der Einsatz der Services von MacinCloud erprobt. Wir beschreiben zwei mögliche Konstellationen aus der Praxis. Ein mögliches Einsatzszenario wird in Abbildung 5 näher beschrieben.

Abb. 5: Konfiguration zum Erstellen von mobilen Apps mit RAD Studio und MacinCloud

Abb. 5: Konfiguration zum Erstellen von mobilen Apps mit RAD Studio und MacinCloud

Einige Erläuterungen dazu sind angebracht. Auf dem lokalen PC wird RAD Studio als integrierte Entwicklungsumgebung ausgeführt. Der technische Hintergrund gestaltet sich wie folgt: Mit Hilfe von RAD Studio [7] und dem Framework FireMonkey können geräteübergreifende Applikationen erstellt werden, die auf Windows, Linux, macOS, Android und iOS ausgeführt werden können. Es entstehen native Apps. Das User Interface wird in einem grafischen Designer erstellt. Für das Erstellen der App-Packages der iOS-Plattform wird jedoch ein Zugriff auf Xcode (macOS) benötigt, während die Entwicklungsumgebung ausschließlich unter Windows ausgeführt werden kann. Mit Hilfe des Dienstes MacinCloud wird ein virtueller Mac zur Verfügung gestellt. Dazu haben wir einen entsprechenden Account bei dem Dienst erstellt und den Abrechnungsmodus Pay-As-You-Go ausgewählt. Als Betriebssystem wählen wir die aktuelle Version macOS Catalina 10.15.3. Für die Auswahl der Hardware haben wir keine besonderen Voraussetzungen, da wir lediglich die App-Packages erstellen wollen und den iOS-Simulator auf dem System einsetzen möchten. Der Mac in der Cloud wird mittels der Software PAServer von außen gesteuert. Aktuell ist die Version 20. Nach der Konfiguration des Macs war darauf leider nicht die aktuelle Version des PAServers installiert. Da man beim gewählten Servicemodell (Managed Server) über keine Administrationsrechte verfügt, kann man keine weitere Software selbst installieren, aber eine an den Support gestellte Anfrage mit der Bitte um Aktualisierung wurde umgehend erfüllt.

Danach können wir die Verbindung vom lokalen Entwicklungsrechner (Windows) zum Remote-Mac als Rechner in der Cloud herstellen. Dazu benötigen wir die IP des Mac. Die haben wir mit der Anmeldung beim Service per E-Mail mitgeteilt bekommen. Es handelt sich um eine statische IP. Damit muss die Konfiguration nur einmal durchgeführt werden. In RAD Studio wählen wir in Projektansicht | Zielplattformen den Eintrag iOS und erstellen eine neue Konfiguration (Abb. 6).

Abb. 6: Konfiguration von RAD Studio (lokal) und Mac (Cloud)

Abb. 6: Konfiguration von RAD Studio (lokal) und Mac (Cloud)

Vor dem ersten Start der App werden lokal noch einige Systembibliotheken installiert. Danach stehen Ihnen die unterschiedlichsten iOS-Geräte über Simulatoren in der Projektverwaltung zur Verfügung (Abb. 7).

Abb. 7: Die in der Cloud verfügbaren Geräte (simuliert) werden lokal angezeigt

Abb. 7: Die in der Cloud verfügbaren Geräte (simuliert) werden lokal angezeigt

Starten Sie die App, und nach dem Kompilieren wird die App für iOS im Simulator in der Cloud ausgeführt. Sie können jetzt die App testen und damit arbeiten, als ob der Mac in Ihrem lokalen Netzwerk zur Verfügung stehen würde (Abb. 8).

Abb. 8: Links: Remotedesktop mit MacinCloud; rechts: RAD Studio (lokal)

Abb. 8: Links: Remotedesktop mit MacinCloud; rechts: RAD Studio (lokal)

Die generierten App-Packages könnten wir dann zum Beispiel über einen weiteren Cloud-Service auf den unterschiedlichsten mobilen Geräten testen.

Entwicklung in der Cloud

Wir gehen davon aus, dass die App mit Hilfe von Visual Studio erstellt wird. Hier haben wir die Möglichkeit, auf einem Windows-PC (lokal) zu arbeiten und über die Netzwerkverbindung auf Xcode und den Simulator auf einem Remote-Mac zuzugreifen. Die Systemkonfiguration wäre dann ähnlich wie im eben beschriebenen Fallbeispiel. Es gibt jedoch auch eine weitere Option (Abb. 9).

Abb. 9: Visual Studio for Mac (Cloud) und Visual Studio für Windows (lokal)

Abb. 9: Visual Studio for Mac (Cloud) und Visual Studio für Windows (lokal)

Wir entwickeln die App entweder komplett oder teilweise in der integrierten Entwicklungsumgebung Visual Studio for Mac auf dem Remote-Mac. Der Zugriff erfolgt über Remotedesktop von unserem lokalen Rechner. Dabei ist es vorteilhaft, wenn Sie den Mac bei der initialen Konfiguration mit etwas mehr Rechenpower und Speicher ausstatten (Abb. 10).

Abb. 10: Auswahl der Systemhardware bei der Mac-Konfiguration

Abb. 10: Auswahl der Systemhardware bei der Mac-Konfiguration

Eine gute Internetverbindung vorausgesetzt, können Sie via Remotedesktop mit Visual Studio for Mac so programmieren, als ob Sie direkt vor einem Mac sitzen. Auch das Testen auf einem iOS-Simulator ist unmittelbar möglich. Projekte aus Visual Studio for Mac können Sie in Visual Studio auf einem Windows-System öffnen (und umgekehrt) und dann lokal die App zum Beispiel für Android testen und anpassen. Beide Systemkonfigurationen sind Beispiele aus der Praxis, die zeigen, wie man Cloud-Services und lokale Geräte zu einer passenden Entwicklungs- und Testumgebung zum Erstellen von Mobile-Apps gemeinsam und integriert verwendet.

Fazit

Über Cloud-Angebote können Softwareentwickler und Tester auf notwendige Hardware zugreifen. Gerade für das geschlossene Universum der Apple-Produkte kann das eine interessante Alternative gegenüber physischen Produkten sein. Die Servicevereinbarungen sind so gestaltet, dass sich auch eine gelegentliche Nutzung lohnen kann. Auch um Apps auf einer großen Anzahl unterschiedlicher Geräte zu testen, sind in der Cloud gehostete und über das Internet zugänglich Smartphones und Tablets eine Option.

Weitere Informationen zu diesen und anderen Themen der IT finden Sie unter http://larinet.com.

Geschrieben von
Dr. Veikko Krypczyk
Dr. Veikko Krypczyk
Dr. Veikko Krypczyk studierte und promovierte in Betriebswirtschaftslehre mit dem Schwerpunkt Wirtschaftsinformatik. Er ist Entwickler und Fachautor. Aktuell beschäftigt er sich mit der App-Programmierung für Windows Phone und Android.
Olena Bochkor
Olena Bochkor
Olena Bochkor studierte Betriebswirtschaftslehre u. a. mit dem Schwerpunkt Wirtschaftsinformatik. Weitere Informationen zu diesen und anderen Themen der IT finden Sie unter http://it-fachartikel.de.
Kommentare

Hinterlasse einen Kommentar

avatar
4000
  Subscribe  
Benachrichtige mich zu: