Anmerkung des Autors
Im Rahmen meiner Bachelorarbeit an der Ostschweizer Fachhochschule entwickelte ich im Frühlingssemester 2021 für die CSEM, ein Forschungs- und Entwicklungszentrum mit Sitz in der Schweiz, eine Smartphone-App für ein elektrochemisches Messgerät. Dabei verwendete ich Xamarin Forms, ein Open-Source-Framework von Microsoft, um die App plattformübergreifend bereitstellen zu können. Zwar wurde der Support für Xamarin Forms anfangs Mai 2024 eingestellt, jedoch gibt es mit .NET MAUI einen offiziellen Nachfolger, sodass der hier behandelte Leitfaden nach wie vor Relevanz aufweist.
Einleitung
Xamarin Forms wurde zu dem Zweck entwickelt, der stetig wachsenden Nachfrage nach mobilen Apps nachzukommen und dabei der Herausforderung, Anwendungen für verschiedene Plattformen wie iOS und Android zu entwickeln, Rechnung zu tragen. Um diese plattformübergreifenden Mobile-Apps mit einer einzigen Codebasis zu entwickeln, stellt Xamarin Forms eine effiziente und elegante Lösung dar, auf die in diesem Blogpost näher eingegangen wird.
Was ist Xamarin Forms?
Wie bereits erwähnt, handelt es sich bei Xamarin Forms um ein Open-Source-Framework von Microsoft. Es ermöglicht Entwicklern, native Mobile-Apps für Android, iOS und Windows zu erstellen, denen eine einzige Codebasis zu Grunde liegt, bei der zum einen die Programmiersprache C#, zum anderen die Beschreibungssprache XAML (Extensible Application Markup Language) zum Einsatz kommt. Aufbauend auf dem Xamarin Framework, ermöglicht Xamarin Forms die Wiederverwendung von Code auf den verschiedenen Betriebssystemen, ausserdem stellt es eine zusätzliche Abstraktionsschicht bereit, durch deren Anwendung eine einheitliche Benutzeroberfläche für alle Plattformen erstellt werden kann.
Vorteile von Xamarin Forms
Gemeinsame Codebasis
Mithilfe von Xamarin Forms kann eine App entwickelt werden, die sowohl für iOS als auch für Android (sowie für Windows) bereitgestellt werden kann, ohne dass für jede Plattform eine eigene Codebasis gepflegt werden muss. Dadurch kann der Entwicklungsaufwand erheblich reduziert werden und können Zeit und Ressourcen gespart werden.
Kaum nennenswerte Leistungsminderung
Zu den grössten Stärken von Xamarin gehört unter anderem, dass der direkte Zugriff auf native APIs und Bibliotheken der jeweiligen Plattformen gewährt wird. Dadurch kann eine Leistung erreicht werden, die nahezu derjenigen einer nativen App entspricht.
Wiederverwendbarkeit von UI-Komponenten
Durch das Angebot einer Vielzahl von benutzerdefinierten Steuerelementen, Layouts und Seiten, die plattformübergreifend verwendet werden können, wird ein einheitlicher Designentwurf unterstützt, der auf allen Plattformen gut zur Geltung kommt.
Einbindung des .NET-Frameworks
Als Teil des .NET-Ökosystems bietet Xamarin Forms Entwicklern eine breite Palette an Tools, Bibliotheken und Support durch die Community, wodurch einerseits die App-Entwicklung und andererseits der Austausch von Best Practices gefördert wird.
Trennen von Design und Logik
Durch die Unterstützung des Model-View-View-Model (MVVM)-Musters und die Verwendung der Beschreibungssprache XAML, mit der Layouts und UI-Komponenten wie Buttons oder Textfelder in einer XML-ähnlichen Struktur festgelegt werden können, wird eine saubere Trennung von Geschäftslogik und Benutzeroberfläche gefördert. Auf diese Weise sorgt Xamarin Forms nicht nur für besser wartbaren Code, sondern auch für schneller vonstattengehende Test-/Weiterentwicklungszyklen.
Entwicklung einer App mit Xamarin Forms
Der App-Entwicklungsprozess unter Verwendung von Xamarin Forms lässt sich grob in die folgenden vier Schritte unterteilen:
1. Einrichtung der Entwicklungsumgebung
Visual Studio ist vonnöten (für Windows oder macOS) mit den entsprechenden Xamarin-Erweiterungen, um mit der Entwicklung beginnen zu können. Nachdem die Installation der benötigten Erweiterungen erfolgt ist, kann durch das Auswählen einer «Xamarin Forms»-Vorlage automatisch eine plattformübergreifende Lösung für Android und iOS erstellt werden, optional auch für UWP (Universal Windows Platform).
An dieser Stelle muss noch erwähnt werden, dass für das Testen von Xamarin Forms Apps für iOS zwingend ein macOS-Gerät benötigt wird, aufgrund gewisser Voraussetzungen vonseiten Apples, worauf hier jedoch nicht weiter eingegangen wird. Einmal eingerichtet kann auf das macOS-Gerät allerdings auch per Remote zugegriffen werden, um die Tests von einem Windows-Gerät aus durchzuführen.
2. Implementierung der Geschäftslogik
Für die Implementierung der Geschäftslogik wird die Programmiersprache C# verwendet, mit der das MVVM-Muster einfach umgesetzt werden kann, wodurch eine saubere Struktur ermöglicht wird. Ausserdem lässt sich durch das Binding von Daten an die UI-Komponenten eine direkte Kommunikation zwischen ViewModel und View erreichen, ohne dass weitere Code-Beziehungen hinzugefügt werden müssen.
3. Entwurf der Benutzeroberfläche
Um die Benutzeroberfläche zu gestalten, gibt es in Xamarin Forms zwei verschiedene Vorgehensweisen: Entweder man verwendet, wie auch bei der Geschäftslogik, C# oder man greift auf die Beschreibungssprache XAML zurück. Letztere ist zu bevorzugen, da es sich dabei um eine deklarative Syntax handelt, mit der sowohl das Layout als auch die Steuerelemente einer App definiert werden können. Durch die Verwendung von verschiedenen Layouts (StackLayout, Grid, FlexLayout) und von Steuerelementen (Buttons, Labels, ListViews) kann eine benutzerfreundliche Oberfläche erstellt werden, die auf allen Plattformen ihre Wirkung entfaltet.
4. Plattform-spezifische Anpassungen
Für den letzten Schliff bietet Xamarin Forms noch die Features DependencyService und Custom Renderer, ersteres zur Implementierung von plattformspezifischen Funktionen in Xamarin Form Apps, letzteres zur Anpassung des Verhaltens von Xamarin Forms Steuerelementen an die jeweilige Plattform. Mit diesen Features kann flexibel auf spezielle Anforderungen eingegangen werden, die nur auf bestimmten Plattformen relevant sind.
Xamarin Forms Best Practices
- Strikte Trennung der Geschäftslogik von der Benutzeroberfläche
Um zu gewährleisten, dass Design und Logik sichtlich voneinander getrennt sind, sollte auf das MVVM-Muster zurückgegriffen werden. Dies sorgt für eine bessere Wartbarkeit und Skalierbarkeit der App.
- Beschränkung der plattformspezifischen Anpassungen auf ein Minimum
Der geteilte Code sollte möglichst umfangreich sein und der Anteil an plattformspezifischem Code geringgehalten werden. Dadurch können Updates und Wartungen einfacher vonstattengehen.
- Verwendung von echten Geräten für Testzwecke
Für das Debugging lohnt es sich zwar, die von Visual Studio bereitgestellten Emulatoren zu benutzen, um jedoch die Einsatzfähigkeit einer App auf verschiedenen Hardwarekonfigurationen und Betriebssystemversionen zu testen, sollte unter keinen Umständen auf echte Geräte verzichtet werden.
Neuerungen von .NET MAUI gegenüber Xamarin Forms
Als offizieller Nachfolger von Xamarin Forms bietet .NET MAUI (Multi-platform App UI) einiges an Verbesserungen. An erster Stelle gilt es die Erweiterung auf eine «Single Project»-Struktur zu nennen, die es ermöglicht, plattformübergreifenden und plattformspezifischen Code in einem einzigen Projekt unterzubringen, wodurch die Entwicklung vereinfacht wird. Des Weiteren wird zusätzlich zu Android, iOS und Windows neu auch macOS als native Plattform unterstützt. Zudem wurde die Performance optimiert, die Handhabung von plattformspezifischen Anpassungen vereinfacht und wurden die Renderer von Handlers abgelöst, die eine flexiblere Anpassung von UI-Komponenten ermöglichen. Schliesslich sorgt .NET MAUI noch für eine engere Integration in das .NET-Ökosystem und für moderne Entwicklungserfahrungen durch die Nutzung der neuesten C#- und .NET-Features.
Folgender Microsoft-Artikel erläutert die Migration einer Xamarin Forms App zu .NET MAUI:
Fazit
Xamarin Forms erscheint als die nahezu ideale Lösung für die Entwicklung von Apps, die auf verschiedenen Plattformen bereitgestellt werden sollen, wenn die nötige Zeit oder Energie fehlt, um für jede Plattform eine separate App zu entwickeln. Durch geteilten Code in einer gemeinsamen Codebasis lässt sich die Effizienz der App-Entwicklung massgeblich steigern und trotzdem bleibt genug Flexibilität, um auf plattformspezifische Anforderungen einzugehen. Dadurch kommt der Endnutzer in den Genuss einer hochwertigen Benutzererfahrung, sei es auf iOS, Android oder Windows.
Wenn du darüber nachdenkst, eine pattformübergreifende Smartphone-App zu entwickeln, solltest du vielleicht die Verwendung von Xamarin Forms oder seines Nachfolgers .NET MAUI in Betracht ziehen. Als Einstieg in die Thematik kann ich folgendes Buch empfehlen, das ich in Vorbereitung auf meine Bachelorarbeit durchgegangen bin und das sich auch online finden lässt:
Petzold, Charles (2016): Creating Mobile Apps with Xamarin.Forms. Cross-platform C# programming for iOS, Android, and Windows Phone. Redmond: Microsoft Press.
Autor: Daniel Baur