APP-ENTWICKLUNG MIT XAMARIN.FORMS
Xamarin.Forms ist ein Framework zur Entwicklung von Android, iOS und Windows Phone Apps. Es verwendet C# als Programmiersprache und macht es möglich, den Code zwischen den Betriebssystemen wiederzuverwenden.
Angenommen, in einem Unternehmen soll eine App für alle drei Plattformen – Android, iOS und Windows Phone – entwickelt werden. Schnell wird klar, dass damit ein sehr hoher Aufwand verbunden ist, denn alle Plattformen besitzen
- verschiedene Programmiersprachen
- verschiedene Entwicklungsumgebungen
- verschiedene UI Konzepte
- verschiedene Frameworks und APIs
In der Praxis bedeutet das: Drei Teams arbeiten mit drei Programmiersprachen an der gleichen mobilen Lösung. Cross-Plattform Lösungen versuchen, dieses Problem zu lösen, indem sie eine gemeinsame Programmiersprache für alle Plattformen verwenden.
Dabei lassen sich zwei Kategorien von Cross-Plattform Lösungen unterscheiden:
- Lösungen, die Web Technologien verwenden, welche von allen Plattformen unterstützt werden. In diese Kategorie fallen die Frameworks Apache Cordova (ehemals PhoneGap), Sencha oder Ionic.
- Lösungen, die als Native Cross-Plattform bezeichnet werden. Dabei wird der vom Entwickler geschriebene Code automatisch in den nativen Code der Zielplattform übersetzt. Die so entstandene App hat die Performanz und das Look and Feel von nativen Anwendungen. In diese Kategorie fällt Xamarin.
CROSS-PLATTFORM ENTWICKLUNG MIT C#
Die Cross-Plattform Entwicklung mit .NET ist fast so alt wie das .NET Framework selbst. Mit dem quelloffenen .NET Runtime Mono ist es bereits seit 2001 möglich, C# Code unter Linux, macOS und Windows auszuführen.
Mono wurde zunächst von der Firma Xiamian entwickelt, welche von Novell übernommen wurde. Nach der Übernahme von Novell durch Attachmate im Jahr 2011 wurde die Firma Xamarin ausgegründet. Miguel de Icaza, Gründer von Xamarin, gab daraufhin in seinem Blog das klare Firmenziel vor: „Build a new commercial .NET offering for iOS and Android“.
XAMARIN.ANDROID UND XAMARIN.IOS
Diesem Ziel folgend hat Xamarin zunächst eine C# Anbindung für die nativen Android und iOS APIs geschrieben: Xamarin.Android (basierend auf Mono for Android) und Xamarin.iOS (basierend auf MonoTouch). So können Android und iOS Apps in C# entwickelt werden, während gleichzeitig der volle Zugriff auf die native Betriebssystemfunktionalität gegeben ist. Jedes neue Android oder iOS Release zieht folglich ein neues Xamarin Release mit aktualisierten Bindings nach sich.
Der große Vorteil einer einheitlichen Programmiersprache ist, dass gemeinsam genutzte Geschäftslogik in eigene Projekte (Portable Class Library) ausgelagert und wiederverwendet werden kann. Trotzdem müssen Entwickler auch mit Xamarin.iOS und Xamarin.Android weiterhin die Betriebssystemspezifika kennen und den UI Code für jede Plattform separat schreiben.
XAMARIN.FORMS
Die App Entwicklung für Android, iOS und Windows Mobile lässt schnell erkennen, dass der Anteil der gemeinsam genutzten Geschäftslogik begrenzt ist. Den Löwenanteil bei der App Entwicklung macht die UI Entwicklung aus, und genau hier setzt das Xamarin.Forms Framework an.
Xamarin.Forms ist eine Abstraktionsschicht über Xamarin.iOS und Xamarin.Android und bringt eigene Komponenten für die plattformunabhängige Beschreibung der UI mit. Oberflächen können in Xamarin.Forms entweder durch C# oder XAML beschrieben werden. .NET Entwickler, die bereits Erfahrungen mit WPF, Silverlight oder Windows Phone haben, werden sich heimisch fühlen.
Bei der Kompilierung einer Xamarin.Forms App übersetzt Xamarin die allgemeinen UI Elemente in die nativen UI Elemente der Zielplattform. So wird beispielsweise aus einem Xamarin.Forms Switch in iOS ein UISwitch, ein Switch unter Android und ein ToggleSwitch unter Windows Phone.
In Xamarin.Forms stehen insgesamt 19 Steuerelemente (Views) zur Verfügung, beispielsweise Buttons, Textboxen (Entry bzw. Editor) oder komplexere Steuerelemente wie DatePicker. Die Darstellung und das Verhalten der Steuerelemente kann plattform-spezifisch über sogenannte Renderer angepasst werden. Zur Anordnung der Steuerelemente bietet Xamarin.Forms einen Satz von Layouts: ein StackLayout (in WPF ein StackPanel), ein AbsoluteLayout für die absolute Positionierung von Elementen, ein GridLayout und ein ScrollView.
Die Navigation in der App wird über Pages abgebildet. Xamarin.Forms bietet als wichtigsten Navigationsformen eine hierarchische Navigation (NavigationPage), die Navigation über Tabs (TabbedPage) und eine Master-Detail Ansicht mit einer Navigationsleiste und Detailseite (MasterDetailPage).
WANN XAMARIN.FORMS EINSETZEN?
Für den Einsatz von Xamarin.Forms sollten einige Einschränkungen beachtet werden. So steht durch die Abstraktion von Xamarin.Forms über Android und iOS nur die gemeinsame Schnittmenge der Plattformen zur Verfügung. Ein weiterer wichtiger Aspekt ist die Startzeit von Xamarin.Forms Apps: Sobald viele externe Bibliotheken in Xamarin.Forms Apps verwendet werden, steigt die Ladezeit einer Xamarin.Forms App deutlich an. Auch müssen mit jedem Android und iOS Release die aktualisierten C# Bindings von Xamarin bereitgestellt werden, was zu Verzögerungen bei der Bereitstellung einer App führen kann, wenn neue Android und iOS Versionen zur Verfügung stehen.
Xamarin.Forms eignet sich besonders für
- Apps, die nur wenig plattformspezifische Anteile besitzen
- Apps, bei denen die Wiederverwendung von Code wichtiger als eine spezielle UI ist
- Entwickler mit Erfahrungen in C# und XAML
- Apps, die nur wenig plattformspezifische Anteile besitzen
- Apps, bei denen die Wiederverwendung von Code wichtiger als eine spezielle UI ist
- Entwickler mit Erfahrungen in C# und XAML
Xamarin.Android und Xamarin.iOS eignen sich für
- Apps, die native UI Funktionalität verwenden, die nur auf der Zielplattform verfügbar ist
- Apps, die plattformspezifische APIs verwenden
- Apps, bei denen eine spezialisierte UI wichtiger als die Wiederverwendung von Code ist
AUSBLICK: XAMARIN.FORMS 3.0
Auf der Microsoft Build Konferenz 2017 wurde Xamarin.Forms 3.0 angekündigt.
Das wichtigste Feature in Xamarin.Forms 3.0 sind die sogenannten Fast Renderer. In Xamarin.Forms werden Renderer verwendet, um von einem plattform-unabhängigen Steuerelement in das native Steuerelement zu konvertieren. Microsoft überarbeitet derzeit die existierenden Renderer, um die Darstellung der Renderer zu vereinfachen und so die Performance und den Speicherverbrauch zu verbessern.
Weitere Neuerungen:
- Mit Xamarin.Forms 3.0 werden zusätzlich vier neue Plattformen unterstützt: macOS, Linux, Windows Presentation Foundation (WPF) und Tizen
- Vor Xamarin.Forms 3.0 haben auschließlich Xamarin.Forms Komponenten die nativen Schnittstellen von Xamarin.Android und Xamarin.iOS aufrufen können. Mit Xamarin.Forms 3.0 wird nun auch die Gegenrichtung unterstützt: Es ist möglich die Xamarin.Forms Komponenten aus Xamarin.Android und Xamarin.iOS Projekten heraus aufzurufen und wiederzuverwenden.
- Die XAML Implementierungen von Xamarin.Forms und WPF unterscheiden sich hinsichtlich der bereitgestellten Sprachkonstrukte. Aus diesem Grund arbeitet Xamarin derzeit an der Standardisierung von XAML mit, welche bis zum Release von Xamarin.Forms 3.0 final sein soll.
- Mit dem XAML Standard 1.0 soll zukünftig sichergestellt werden, dass XAML auch zwischen Xamarin.Forms und WPF wiederverwendet werden kann.
Autor: Philipp Wagner, Softwareentwickler bei OVSoftware