Erfahrungen aus der Cross-Plattform-Entwicklung mit Xamarin – die Übersicht

Xamarin versucht, durch native Programmierung plattformübergreifend zu agieren. Ein Artikel über Potenziale, Architektur und Implementierungsdetails des Tools.

Lesezeit: 6 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 11 Beiträge

(Bild: BEST-BACKGROUNDS / Shutterstock.com)

Von
Inhaltsverzeichnis

Xamarin entstammt der Mono-Community, die sich zum Ziel gesetzt hatte, ein Open-Source-Pendant zu Microsofts damals proprietärem .NET Framework zu entwickeln. Es soll die Entwicklung von Cross-Plattform-Applikationen im mobilen Bereich vereinfachen und beschleunigen. Microsoft übernahm 2016 Xamarin, was dazu führte, dass der Konzern das bis dahin kostenpflichtige Werkzeug als Open-Source-Projekt weiterführte und es für Entwickler kostenlos wurde. Auch heute wird noch aktiv an Xamarin weiterentwickelt und es werden regelmäßig neue Updates veröffentlicht.

Erfahrungen aus der Cross-Plattform-Entwicklung mit Xamarin

Der erste Teil der Beitragsreihe hat die unterschiedlichen Ansätze der Cross-Plattform-Frameworks erklärt. Xamarin setzt auf eine geteilte (also plattformunabhängige) Applikationslogik und ein nativ entwickeltes (also plattformspezifisches) User Interface (UI). Es nutzt plattformabhängigen Code beispielsweise, um GPS- oder Beschleunigungssensoren anzusprechen. Manche APIs stellt Xamarin jedoch noch nicht plattformunabhängig bereit. Dieser Teil lässt sich in C# oder aber auch nativ, etwa in Java qoder Swift, entwickeln. Für iOS bedeutet das zum Beispiel, dass Entwickler in ihren UI-Storyboards .xib-Dateien und die bekannten Klassen, Controller und Widgets der Apple-Frameworks nutzen. Der Xamarin-Ansatz ist gut geeignet, wenn man ein komplexes, sich nativ verhaltendes UI und einen großen Anteil plattformunabhängiger Geschäftslogik hat. Abbildung 1 zeigt zusammenfassend den groben Aufbau einer solchen Xamarin-App:

Grobaufbau von Xamarin-Apps (Abb. 1)

Beim Verwenden von Xamarin benötigen Entwickler nach wie vor pro Zielplattform ein Team, das sich mit den nativen Frameworks auskennt, da sowohl das UI als auch Hardwarezugriffe nicht abstrahiert werden. Lediglich die Dienstschicht wird bei Xamarin komplett als eine Einheit entwickelt. Den Umstand versucht Xamarin.Forms zu entschärfen. Dabei (s. Abb. 2) baut man statt einem plattformspezifischen ein plattformübergreifendes UI. Xamarin.Forms setzt auf XAML und C# als Techniken zum Erstellen des UI. Das Framework selbst kümmert sich um die Übersetzung der jeweils verwendeten Steuerelemente in native Elemente und ein dementsprechendes Aussehen. Durch diesen Ansatz kann sich Xamarin.Forms nur als kleinster gemeinsamer Nenner zwischen den Plattformen verstehen.

Ursprünglich entwickelt, um recht einfache UIs in native UI-Komponenten zu übersetzen, ist das Framework mittlerweile sehr mächtig. Es lassen sich damit auch komplexe UIs umsetzen, da es zunehmend mehr native UI-Elemente unterstützt. Xamarin.Forms lässt sich zudem mit nativen UI-Elementen kombinieren, um spezielle plattformabhängige UIs zu bauen.

Die Abbildung des Xamarin.Forms UI auf native Elemente erfolgt durch besondere Klassen, sogenannte Renderer. Sie sind für Standardelemente bereits definiert. Man kann diese Klassen auch anpassen oder selbst Renderer für eigene UI-Elemente erstellen. Renderer sind für jede unterstützte Plattform zu entwickeln, da man das Mapping zwischen der jeweiligen nativen Komponente und dem Xamarin.Forms-Pendant definieren muss. Das native UI wird nur noch aus dem Xamarin.Forms UI und den Renderern generiert.

Dadurch hat Xamarin mit Xamarin.Forms einen Schritt weiter in Richtung plattformunabhängige Entwicklung vollzogen, ohne das native Look & Feel der Plattformen zu beseitigen. Und damit steigt das Potenzial, Code wiederverwenden zu können.

Grobaufbau von Xamarin.Forms (Abb. 2)

Dennoch sind nach wie vor Sensor-APIs (z.B. Kamera, Gyroskop und GPS) direkt nativ anzusprechen oder durch Plug-ins zu kapseln, die diese Aufgabe übernehmen. Die Plug-ins stammen häufig von Drittanbietern und sind auf spezielle Probleme zugeschnittene Insellösungen, die mit der Zeit zu Wildwuchs und Inkompatibilitäten zwischen den Plug-ins geführt haben. Das Problem versucht die Xamarin-Community nun mit Xamarin.Essentials zu entschärfen. Diese vereinigen zahlreiche häufig genutzte Systemfunktionen und APIs unter einem Dach. So ist sichergestellt, dass sich die Erweiterung, die die Aufnahme eines Fotos mit der Kamera ansteuert, mit der verträgt, die das Gyroskop bedient. Damit reduziert sich die Notwendigkeit, plattformspezifischen Code zu nutzen, noch weiter.

Im Folgenden erläutern die Autoren, wie man mit Xamarin.Forms eine App baut, und gehen dabei auf einige wesentliche Details der Implementierung ein.