Eine Publikation der Swissprofessionalmedia AG
PDF download
Xamarin : Ausgabe 04/2018, 01.03.2018

Plattformunabhängige Apps programmieren

SBB, Rega, Krankenkassen, Facebook und Co. – (fast) für alles gibt es heutzutage Apps, die uns im Alltag unterstützen. Doch wie programmiert man eine App für die unterschiedlichen Plattformen? In diesem Artikel erfahren Sie, wie man eine plattformunabhängige App mit Xamarin erstellt.

Autor: Michael Giger, Text und Bilder

Bilder: Fotolia

Glaubt man den Analysen von Gartner (siehe Quick-Link) wurden im ersten Quartal 2017 weltweit 327 163 600 Android-Handys verkauft. Das entspricht einem Marktanteil von 86,1 %. iOS schafft es auf 13,7 %. Die Schweiz ist jedoch ein Apple-Land und gemäss StatCounter (siehe Quick-Link) liegt der Anteil von iOS-Geräten bei uns bei über 55 %.

Soll eine App auf den verschiedenen Plattformen zur Verfügung gestellt werden, wird man als Entwickler mit dem Problem konfrontiert, dass es zwischen Android und iOS keine Gemeinsamkeiten gibt! Sie unterscheiden sich nicht nur in der Entwicklungsumgebung und Programmiersprache, sondern auch die grundlegenden Entwicklungskonzepte, Laufzeitumgebungen und Benutzeroberflächen sind komplett anders. Da kommt Xamarin ins Spiel.

Xamarin wurde 2001 eingeführt

Xamarin wurde von den Entwicklern von Mono, einer Open-Source-Entwicklungsplattform basierend auf dem .NET Framework, von Miguel de Icaza entwickelt und im Jahr 2001 eingeführt. Die Firma Xamarin wurde am 16. Mai 2011 gegründet. Das zunächst kommerzielle Produkt ermöglicht, Apps für iOS und Android in nur einer Programmiersprache (C#) zu implementieren.

Xamarin.iOS und Xamarin.Android sind C# Wrapper, die den C# Sourcecode in plattformspezifischen Programmcode übersetzen. Mit Xamarin.Forms ist es sogar möglich, den Code der Benutzeroberfläche zu teilen. Mit diesem Ansatz lässt sich ein Grossteil des Sourcecodes – es ist die Rede von bis zu 96 % – wiederverwenden. Dies reduziert die Zeit für Entwicklung, Tests und Wartung erheblich.

Microsoft hat den Zug der mobilen Entwicklung vor rund 10 Jahren verpasst und scheiterte folglich mit der eigenen Plattform. Das war wohl der Grund, dass Microsoft im 2016 Xamarin erworben hat und seitdem Teil von der Entwicklungsplattform «Visual Studio» ist. Nebst den kostenpflichten Editionen «Visual Studio Professional» und «Visual Studio Enterprise» bietet Microsoft eine kostenlose Edition «Visual Studio Community» für Windows und Mac an, welche auch für die Entwicklung von Android- und iOS-Apps verwendet werden kann.

Ihre erste Xamarin-App

Aus Platzgründen referenziere ich auf die Xamarin Quickstart App (https://developer.xamarin.com/guides/xamarin-forms/getting-started/hello-xamarin-forms/quickstart/) und erweitere diese «Schritt für Schritt»-Anleitung mit meinen Kommentaren. Die App konvertiert einen Text in eine Telefonnummer, z.B. 081 XAMARIN ergibt 081 9262746 und bietet die Möglichkeit, die Nummer direkt anzurufen. Wer früher eine SMS mit einem «Tastatur-Handy» geschrieben hat, kennt dieses Alphabet, welches den Telefontasten zugeordnet ist (Bild 1).

Installieren Sie nun Visual Studio Community (https://store.xamarin.com/), um selbst eine plattformunabhängige Xamarin.Forms-App zu programmieren. Die Systemvoraussetzungen sowie eine Installationshilfe finden Sie unter https://developer.xamarin.com/guides/cross-platform/getting_started/.

Schritt 3:

Das Projekttemplate heisst neu «Cross-Plattform App (Xamarin.Froms). Achten Sie bitte darauf, dass der Pfad möglichst kurz ist, idealerweise C:\Dev\. Sonst kann es, insbesondere beim Android-Projekt, zu zu langen Pfaden führen, welche in einem Kompilierfehler enden.

Schritt 4:

Im Dialogfenster «New Cross Platform App» kann neu ausgewählt werden, welche Plattformen unterstützt werden sollen. Visual Studio erstellt für jede Plattform ein eigenes Projekt in der Solution.

Unter «Code Sharing Strategy» wählen Sie «.Net Standard» aus. Dies ist der Ersatz von der Portable Class Library (PCL) und enthält viel mehr Programmierschnittstellen (APIs).

Im Solution Explorer ist die Solution «Phone- word» mit vier Projekten ersichtlich.

Phoneword ist das plattformunabhängige Projekt, welches den geteilten Sourcecode enthält. Die restlichen Projekte beziehen sich auf die entsprechende Plattform.

Schritt 5:

Der Schritt entfällt, da die Versionen nicht explizit abgefragt werden. Dies lässt sich in den Projekteinstellungen des UWP-Projekts ändern.

Schritte 6 und 7:

War zum Zeitpunkt des Verfassens des Artikels nicht notwendig. Das aktuelle NuGet Packet für Xamarin.Forms war bereits installiert.

Schritt 20:

Builden Sie die Solution (F6 drücken), bevor Sie mit diesem Schritt beginnen.

Schritt 22:

Das Interface «IDealer» wird nicht erkannt. Dies kann behoben werden, indem Sie die Solution nochmals builden, bzw. die Solution schliessen und erneut öffnen.

Schritt 32:

Wählen Sie die höhere Versionsnummer (10.0.16299.0) von «Windows Mobile Extensions for the UWP» aus.

Schritt 39:

Um die App auf Android zu testen, benötigen Sie entweder einen Emulator oder ein physisches Gerät.

Schritt 40:

Um die App auf iOS zu testen, wird ein Mac benötigt (auch für Simulator). Weiterführende Infos finden Sie unter https://developer.xamarin.com/guides/ios/getting_started/installation/device_provisioning/.

App in Android-Emulator testen

Es gibt diverse Emulatoren für Visual Studio und Android. Die Verwendung des Standard-Android-Emulators wird empfohlen. Dazu ist der Hyper-V zu deaktivieren. Mittels folgendem Powershell Command (als Administrator öffnen) kann die Deaktivierung erreicht werden: bcdedit /set hypervisorlaunchtype off.

Als nächsten Schritt muss der «Hardware Accelerated Execution Manager» (HAXM) heruntergeladen und installiert werden. Siehe https://software.intel.com/en-us/android/tools.

Zum Schluss müssen Sie in Visual Studio unter Tools | Android | Android Emulator Manager… ein virtuelles Gerät hinzufügen. Klicken Sie auf «Create» und füllen die Eingabefelder wie folgt aus. Sie können diesen Schritt für beliebige Geräte wiederholen (Bild 2).

Nun können Sie den Emulator im Dialogfenster «Android Virtual Dives (AWD) Manager» starten und die App deployen. Achten Sie darauf, dass das Android als Startprojekt gekennzeichnet ist (siehe Schritt 38).

Auf physischem Android-Gerät entwickeln

Falls Sie ein Android-Handy besitzen, können Sie die App auf Ihr Gerät installieren (Sideloading genannt). Dazu müssen Sie zuerst die «Entwickleroptionen» aktivieren. Dies erreichen Sie ab Android 4.2, indem Sie siebenmal auf die «Build Nummer» tippen. Unter den Entwickleroptionen müssen Sie «USB-Debugging» und «Aktiv lassen» aktivieren. Bei manchen Geräten ist auch die Installation des USB-Treibers notwendig.

Ich hatte anfangs Probleme, dass das Handy in Visual Studio aufgrund des fehlenden USB-Treibers nicht erkannt wurde. Schlussendlich habe ich die Verwaltungssoftware des Handy-Herstellers installiert und die Entwicklung funktionierte einwandfrei. Wertvolle Entwicklungstipps, z. B. wie auf älteren Handys entwickelt werden kann, finden Sie unter: https://developer.xamarin.com/guides/android/getting_started/installation/set_up_device_for_development/

Infoservice

Hardware + Software ingenieurbüro Giger GmbH
Kirchgasse 13, 8880 Walenstadt
Tel. 081 733 17 77
michael.giger@hsig.ch, www.hsig.ch



Bild 1: fertige App


Bild 2: Emulator konfigurieren

FAEL kompakt

FAEL: Swiss Engineering Fachgruppe für Elektronik und Informatik

Mitglieder: 1046

Gründung: 1978

Präsident: Michael Pichler, Dipl. El. Ing. FH

Kontakt: Michael Pichler, Im Hochrain 6 8102 Oberengstringen, Tel. 076 521 09 10 praesident@fael.ch, www.fael.ch

Nächste FAEL-Events

Wann? Was? Wo?

14.03.18 40 Jahre FAEL – Jubiläumsanlass und GV Winterthur

28.03.18 Skitag mit Führung durch das SLF Davos

05.05.18 Swiss Engineering Studienreise ins Silicon Valley Kalifornien, USA

30.05.18 Neumitgliederanlass Spreitenbach

07.-10.06.18 eDays (Rahmenprogramm um das Formel E-Rennen) Zürich

23.06.18 FAEL E-Bike Tour 2018

07.11.18 13. FAEL Herbstanlass «Autonome Mobilität»

Quick-Links

Smartphone-Studie www.polyscope.ch/2018/Gartner

OS-Markt Schweiz www.polyscope.ch/2018/ Statcounter