Native Cross Plattform Apps mit Xamarin
Nach der Idee eine mobile Applikation zu entwickeln stellt sich schnell die Frage, wie man diese auf die unterschiedlichen Plattformen zur Verfügung stellen kann. Dabei gibt es unterschiedliche Lösungsansätze. Unter anderem:
- Native Entwicklung bzw. eine App pro Plattform
- Hybrid: eine App für alle Plattformen mit HTML und JavaScript
- Xamarin
Falls man eine App für mehrere Plattformen entwickeln möchte, ist die native Variante ist mit viel Aufwand verbunden. Der Grund dafür liegt auf der Hand – pro Plattform muss man die App komplett neu entwickeln. Dabei braucht es pro Plattform spezifisches Knowhow. Dies bedeutet oft, dass auch mehrere Entwicklungsteams benötigt werden.
Hybride Apps locken mit dem versprechen die App nur einmal schreiben zu müssen und diese dann auf all den Plattformen zur Verfügung zu haben. Hybride Apps setzen hierfür auf eine hohe Abstraktion der Plattformen. Native Features einer Plattform kann man zwar einbinden, dafür wird jedoch jeweils ein Plugin benötig. Dies kann zu Performance Problemen führen. Hybride Plattformen werden deshalb oft für Apps verwendet, welche nicht oder nur bedingt native Eigenschaften benötigen.
Mit Xamarin hat man die Möglichkeiten sich vom Besten der beiden Welten zu bedienen. Zum einen werden Apps mit einer einzigen Programmiersprache für die jeweiligen Plattformen implementiert. Zusätzlich handelt es sich aber um vollwertige native Applikationen. So ist es möglich auf alle Bibliotheken und Features der jeweiligen Plattformen zuzugreifen. Dabei kann man grosse Teile der Business Logik zwischen den einzelnen Plattformen teilen und wiederverwenden.
Schneller Einstieg mit Xamarin.Forms
Mit Xamarin.Forms ist es möglich, dass man neben der Business Logik auch die UI Implementation zwischen den Apps teilen kann. Erreicht wird dies, indem man das UI in einer XAML-basierten Sprache entwickelt. Anschliessend wird es automatisch in native UI Komponenten übersetzt. Das bedeutet noch schnellere Entwicklungszeit und geringere Kosten. Besonders UWP/WPF Entwickler können dabei von einem schnellen Einstieg profitieren, da sie die Konzepte hinter XAML bereits kennen. Aber auch Entwickler, welche noch keine Erfahrung in der Entwicklung von Apps haben, werden sich schnell zurechtfinden. Sie müssen nämlich nicht noch zuerst die unterschiedlichen UI Ansätze der verschiedenen Plattformen erlernen, sondern können direkt mit Xamarin.Forms loslegen.

Die Abbildung zeigt auf, wie mit Hilfe von Xamarin.Forms noch mehr Code geteilt werden kann und der plattformspezifische Code weiter reduziert wird.
Xamarin.Forms glänzt dabei vor allem bei der Implementierung von einfachen Apps oder Prototypen. Es ist beeindruckend wie schnell man eine App damit erstellen kann.
Volle Kontrolle mit Xamarin Native
Die Vorteile von Xamarin.Forms gegenüber Xamarin Native schwinden, sobald man ein aufwändiges UI implementieren möchte. Denn durch die zusätzliche Abstraktion von Xamarin.Forms kann es besonders bei komplexen Layouts zu Performance-Einbussen kommen. Mit Xamarin Native hat man volle Kontrolle über die spezifischen UI Eigenheiten und SDK Funktionalitäten der verschiedenen Plattformen. Weiter lassen sich die gleichen Tools für die Entwicklung des UI einsetzen, wie bei den nativen Apps.
Unabhängig ob man Xamarin Native oder Forms verwendet, kann man C# für die Entwicklung einsetzen. Zwar sind Objective-C, Swift und Java grossartige Programmiersprache, jedoch hat sich C# in den letzten Jahren bemerkenswert weiterentwickelt. So ist es zum Beispiel Dank LINQ, Async/Await oder etwa Closures möglich, grossen Boilerplate Code zu vermeiden und saubereren und leserlicheren Code zu schreiben.
Weiter ermöglicht Xamarin auch den Einsatz von nativen Third-Party Bibliotheken. So kann man bereits bekannte Java oder Objective-C Bibliotheken wiederverwenden. Dies bewerkstelligt man mit Hilfe von sogenannten Binding Projekten. Oftmals findet man im Xamarin Component Store oder auf Github bereits entsprechende Bindings und es bleibt einem erspart, diese selber zu generieren.
Fazit
Xamarin ermöglicht es native Apps für iOS und Android zu entwickeln und dabei alle Funktionaltäten der Plattformen zu nutzen. Durch die Verwendung einer Programmiersprache (C#) ist es ausserdem möglich grosse Teile der Business Logik zwischen den Apps zu teilen. Dadurch verringert sich die Entwicklungszeit und man kann eine kürzere Time-to-Market erreichen. Aber nicht nur die Entwicklungszeit und die Kosten kann man durch effizientes Code Sharing minimieren, sondern auch die Anzahl möglicher Fehler. Denn generell kann die Aussage gemachen werden, dass die Anzahl von Fehlern im Code sinkt, wenn weniger Code geschrieben werden muss.