Cross-Plattform Apps mit Xamarin entwickeln

20.01.2017

Das Thema „plattformübergreifende App-Entwicklung“ kommt nicht zum Stehen, sondern wird seit Jahren immer weiter verbessert. Das Ziel ist es, mit möglichst wenig Code bzw. Aufwand für viele Plattformen gleichzeitig eine brauchbare Applikation zu entwickeln. Viele Frameworks gehen dabei den Weg eine WebApp, die mit Webtechnologien wie HTML, CSS und Java Script erstellt wurde, in einen nativen Rahmen einzubetten, um sie wie eine normale App verwenden zu können. Allerdings bekommt man mit einer WebApp nie dasselbe „Look and Feel“ zustande, wie man es von einer nativen App kennt. Hier kommt nun Xamarin ins Spiel. Xamarin baut auf dem .NET Framework auf und ermöglicht es, nativ aussehende Apps für die drei bekanntesten Plattformen iOS, Android und Windows Phone zu entwickeln. Xamarin bietet auch die Möglichkeit, Applikationen für die Plattformen MacOS und Windows zu entwickeln. In diesem Beitrag dreht es sich jedoch größtenteils um den Smartphone Bereich.

Was ist Xamarin?

Xamarin wurde 2011 von den Entwicklern von Mono gegründet. Im März 2016 übernahm jedoch Microsoft das Steuer. Zunächst wurde es nur über eine kostenpflichtige Lizenz angeboten, mittlerweile ist es auch für jeden kostenlos verfügbar.

Mit den Programmiersprachen XAML für das User Interface (UI) und C# für Logik/Backend lassen sich nativ aussehende Apps entwickeln. Dabei ist es möglich etwa 60-100 Prozent des einmalig geschriebenen Codes zwischen den drei verschiedenen Plattformen (iOS, Android, Windows Phone) zu teilen.
Durch die Einführung von Xamarin.Forms im Mai 2014 kann nun auch das UI geteilt werden, wie man auf der nachfolgenden Grafik (Abb.1) erkennen kann.

Abb1
(Abb.1)[1]
Je mehr plattformspezifische Hardware in der App benötigt wird, wie z.B. NFC, Bluetooth, etc., desto weniger lässt sich der Code aufteilen und muss plattformspezifisch geschrieben werden. Besteht eine App dagegen aus viel Frontend und wenigen plattformspezifischen Backend-Funktionen, kann sehr viel bzw. der ganze Code geteilt werden.

Setup von Xamarin

Ein Nachteil bei der Entwicklung mit Xamarin ist das sehr umfangreiche Setup, wenn man für alle drei Plattformen entwickeln will. Für Xamarin benötigt man mindestens einen Rechner mit Windows 8 (eine Virtuelle Maschine funktioniert nicht). Als Integrierte Entwicklungsumgebung (IDE) lässt sich Visual Studio oder Xamarin Studio verwenden. Für eine Android App mit Xamarin benötigt man das Android SDK, für eine Windows Phone App braucht man auch das Windows Phone SDK 8/8.1/10. (Was man für eine reibungslose Verwendung von Visual Studio mit dem Windows Phone SDK beachten sollte ist in diesem Blogbeitrag beschrieben).

Nun bleibt noch die Frage: Was ist mit der iOS Plattform? Um eine Xamarin iOS App zu entwickeln wird ein Mac benötigt, auf dem mindestens Yosemite 10.10 läuft. Auf diesem Mac muss ebenfalls Xamarin installiert sein, außerdem XCode sowie die neuste Version des iOS SDK. Das SDK lässt sich problemlos bei der Installation von XCode mit installieren. Dieser Mac muss im selben Netzwerk sein wie der Windows Rechner, auf dem die IDE läuft. Anderenfalls muss ein Secure Shell (SSH) Zugriff darauf möglich sein. Alternativ gibt es auch noch die Möglichkeit den kostenpflichtigen Dienst macincloud zu verwenden.

Installiert man auf dem Windows Rechner noch den iOS Simulator, lassen sich alle drei Emulatoren (iPhone, Android Phone, Windows Phone) auf einem Bildschirm anzeigen. Somit muss sich der benötigte Mac auch nicht am selben Ort befinden, an dem auch der Windows Rechner steht.

Zum besseren Verständnis ist das gesamte Setup in der nachfolgenden Grafik (Abb.2) nochmal dargestellt.

Abb2

(Abb.2)

Möchte man für alle drei Plattformen entwickeln, sollte man daher schon ca. 80GB(!) freien Speicher bereitstellen.

Hier noch eine grobe Übersicht (Abb.3) über die möglichen Plattformen und welches Setup benötigt wird, um sie abzudecken.

Abb3

(Abb.3)[2]

UI Entwicklung mit Xamarin

Xamarin.Forms liefert den wichtigsten Part hinsichtlich eines teilbaren UIs. Es bietet ein plattformübergreifendes UI-Toolkit, mit dem sich native Benutzeroberflächen für iOS, Android, Windows Phone und UWP Projekte erstellen lassen.

Um es wirklich nativ zu halten, werden bereits standardmäßig native Pages (Abb.4) mitgeliefert, wie z.B. die „TabbedPage“ oder eine „MasterDetailPage“ für das Menü.

Abb4(Abb.4)[3]

Auch in Sachen Layouts (Abb.5) bietet Xamarin.Forms eine ganze Reihe von Lösungen an. Diese sorgen dafür, dass sich alle Inhalte an dem dafür vorgesehenen Platz befinden.

Abb5(Abb.5) [3]

Durch die bereits vorhandenen Controls (Abb.6) lassen sich alle gängigen UI Elemente verwenden, wie man sie von den nativen Plattformen kennt.

Abb6(Abb.6) [3]

Nimmt man zum Beispiel eine „TabbedPage“, die ein „StackLayout“ beinhaltet, welche wiederum zwei „Entry’s“ und einen Button als Unterelemente besitzt, könnte das Ganze in etwa so (Abb.7) aussehen:

Abb7(Abb.7) [3]

 

Der UI Code muss hierzu nur einmal geschrieben werden und wird für jede Plattform nativ umgesetzt. Besonders bei der „TabbedPage“ kann man schnell erkennen, dass sich die Tabs bei iOS am unteren Bildschirmrand, wohingegen sich diese bei Android und Windows Phone am oberen Rand befinden, so wie man es regulär kennt.

Code Behind für UI Logik, Backend und Anbindung externer Dienste

Zu jeder XAML-Datei gibt es auch eine dazugehörige Code-Behind-Datei. Hier wird mit C# die nötige UI-Logik sowie das Backend umgesetzt. Aus dieser Datei heraus lassen sich die ganzen UI-Elemente aus der XAML-Datei problemlos ansprechen und nachträglich verändern. Alle Anbindungen an externe Dienste, wie z.B. der Datenaustausch zwischen der App und dem Server, werden ebenfalls hier umgesetzt. Soll das UI über die nativen Elemente hinaus individuell gestaltet werden, werden sog. „Custom Renderer“ benötigt, die ebenfalls in C# in einer eigenen Klasse geschrieben werden müssen.

Performance

Neben dem Vorteil, dass eine Xamarin-App nativ aussieht, hat es auch eine sehr gute Performance. Viele WebApps haben gerade hier den Nachteil. Beispielsweise ist eine Cordova-App deutlich langsamer als eine, die mit Xamarin umgesetzt wurde (für einen Vergleich zwischen Cordova und Xamarin gibt es übrigens hier einen Blogbeitrag.) Für Xamarin wurden auch bereits einige Benchmark-Tests durchgeführt.

(Abb.8) Die Abbildung zeigt, dass die Werte einer Xamarin-iOS-App auf einem iPad Air 2 und einem iPhone 6 dabei sogar recht nah an die Werte einer App kamen, die mit der hauseigenen Apple-Programmiersprache „SWIFT“ entwickelt wurde.

Abb8(Abb.8)[3]

(Abb.9) Eine Xamarin-Android-App, die unter einem HTC Nexus 9 und einem Moto X getestet wurde, erzielte sogar minimal bessere Werte als dieselbe Android-App, die mit Java entwickelt wurde.

Abb9(Abb.9)[3]

 

Xamarin: Vor- und Nachteile auf einen Blick

Xamarin bietet mit seinem objektorientierten Ansatz eine gute Alternative zu den zahlreichen WebApp-Frameworks, die es bereits gibt. Doch auch dieses Cross-Plattform-Framework bringt seine Vor- und Nachteile mit sich:

Vorteile:

• Gute Performance
• UI sieht auf jeder Plattform nativ aus
• Es lässt sich mit Xamarin.Forms schnell einen brauchbaren Prototypen für alle drei Plattformen entwickeln
• Entwicklung mit XAML nicht besonders schwierig mit Hilfe der Intellisens
• Gute Community sowie gute Hilfe im Xamarin-Forum

Nachteile:

• Einrichtung lang und aufwendig
• Einrichtung festplattenspeicherlastig
• Setup an sich sehr fehleranfällig
• Dokumentation der Xamarin.Forms-API nicht immer hilfreich
• Bei einem UI, das über die nativen Elemente hinausgeht, wird ein „Custom Renderer“ benötigt.

Xamarin eignet sich gut für:

• Apps, die wenig plattformspezifische Funktionen benötigen
• Apps, bei denen ein spezielles UI weniger wichtig ist als teilbarer Code
• Programmierer, die sich mit XAML und C# auskennen
Prototyping

Xamarin eignet sich weniger gut für:

• Apps mit Interaktionen, die ein natives Verhalten erfordern
• Apps, die viele spezifische APIs verwenden (NFC, Fingerabdruckscanner, etc.)
• Apps, bei denen ein spezielles UI wichtiger ist als teilbarer Code

Ausblick

Microsoft treibt Xamarin immer weiter voran. In Zukunft soll es Extensions für das Xamarin-Framkework geben. Ein paar Erweiterungen u.a. für Diagramme und Kalenderübersichten werden auch schon bereits von Drittanbietern angeboten.

Visual Studio mobile Center wird die Weiterentwicklung der Xamarin Test Cloud sein. Bei dieser Cloud-Anwendung werden iOS- und Android-Apps automatisch bei jedem einchecken übersetzt und auf echter Hardware getestet. Erfolgreich getestete App-Pakete können dann direkt an Beta-Tester verteilt werden. Außerdem soll es die Möglichkeit geben, eine Nutzungsanalyse und eine Laufzeitfehlerüberwachung durchzuführen. Eine Unterstützung für UWP und Cordova Apps wird auch angepeilt.


Bildquellen:
[1] http://qode.pro/blog/mobile-app-development-with-xamarin
[2] in Anlehnung an https://developer.xamarin.com/guides/cross-platform/getting_started/requirements/
[3] https://www.xamarin.com/forms
[4] in Anlehnung an https://windowsunited.de/2016/02/27/erlaeuterung-was-genau-ist-xamarin-und-wieso-hat-microsoft-es-gekauft/

Quellen:
• https://www.xamarin.com/
• https://msdn.microsoft.com/en-us/library/mt613162.aspx
https://developer.xamarin.com/guides/xamarin-forms/controls/views/
https://windowsunited.de/2016/02/27/erlaeuterung-was-genau-ist-xamarin-und-wieso-hat-microsoft-es-gekauft/
• http://arteksoftware.com/adding-a-windows-phone-project-to-an-existing-xamarin-sforms-solution/
• https://msdn.microsoft.com/de-de/library/mt679501.aspx

Zurück zur Übersicht

2 Kommentare zu “Cross-Plattform Apps mit Xamarin entwickeln

  1. Hallo René Ebersbacher,

    danke für den Kommentar. Mir persönlich geht es ähnlich, ich kann mich auch nicht endgültig für eine Plattform entscheiden, alle haben ihre Vor- und Nachteile. Genau wie erwähnt ist es einfach nur eine Geschmacksfrage. Mit Xamarin kann ja aber zum Glück die Schlucht zwischen den Plattformen, für eigene Apps, überbrückt werden.

    Viele Grüße

  2. Das hört sich nach einer guten Alternative an, um Apps für gleich mehrere Betriebssysteme gleichzeitig zu entwickeln.
    Ich persönlich habe mich bis heute nicht wirklich endgültig für ein Betriebssystem entschieden. Windows-Phone habe ich schon mal ausgeschlossen jedoch kann ich mich nicht zwichen Apple und Android entscheiden. Zurzeit benutze ich beides. Ich habe einen LTE Prepaidtarif und wechsle die Karte immer zwischen dem Google Pixel und dem iPhone 6. Bei beiden Smartphones gefällt mir, dass die Software bzw. das Betriebssystem von den gleichen Herstellern wie die Hardware also das Smartphone an sich ist. Davor hatte ich ein Samsung Galaxy S6 Edge mit dem ich nicht ganz so zufrieden war.
    Letztendlich denke ich, dass sich die verschiedene Smartphones und Betriebssysteme kaum was nehemen und es mittlerweile fast nur noch Geschmacks-Sache ist.
    Viele Grüße

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*