In der sich dynamischen Welt der mobilen App-Entwicklung verspricht Microsofts .NET MAUI (Multi-platform App UI) eine einheitliche und vereinfachte Lösung für die plattformübergreifender App-Entwicklung.
In diesem Blogpost werfen wir einen Blick auf .NET MAUI, vergleichen es mit seinen Vorgängern Xamarin.Forms und Xamarin Native, untersuchen seine Anforderungen und erläutern, warum die Migration zu .NET MAUI eine kluge Entscheidung ist. Abschliessend betrachten wir die wichtigsten Neuerungen von .NET MAUI mit .NET 8.
Funktionsweise & Unterscheidung
.NET MAUI ist ein modernes Open-Source-Framework, welches erlaubt Apps zu entwickeln, die auf Android, iOS, macOS und Windows laufen. Es ist der Nachfolger zu Xamarin.Forms und ermöglich ebenso grosse Teile vom Code (Business-Logik sowie UI) zwischen den Plattformen zu teilen. Dadurch kann der Implementationsaufwand gegenüber separat entwickelten Apps enorm reduziert werden.
Auf den Mobilen Plattformen sowie auf macOS wird weiterhin die Mono Runtime zur Ausführung genutzt. Im Gegensatz zu Xamarin.Forms wird aber nicht mehr auf Xamarin.iOS bzw. Xamarin.Android aufgebaut, sondern auf die plattformspezifischen .NET-Frameworks «.NET for iOS» bzw. «.NET for Android». Diese sind seit .NET 6 die Weiterentwicklung von Xamarin Native. Sie sind ebenfalls dem .NET-Release-Zyklus unterstellt und seit Neuem in der Version von .NET 8 verfügbar.
Wie von Xamarin.Forms gewohnt, kann auch mit .NET MAUI auf alle nativen Gerätefunktionen zurückgegriffen werden wie GPS, Bluetooth und Beschleunigungssensoren. Es bietet dieselben Funktionen wie eine rein native Entwicklung.
Support & Kompatibilität
Der Support für Xamarin wird am 1. Mai 2024 eingestellt, was Xamarin.Android, Xamarin.iOS und Xamarin.Forms betrifft. Dies bedeutet, dass es nach diesem Datum keine neuen Xamarin SDKs mehr geben wird. Daher werden Android 14 und iOS 17 die letzten Betriebssystemversionen sein, die von Xamarin vollständig unterstützt werden.
Dabei ist es wichtig zu wissen, dass Google sowie Apple vorgeben, welche Betriebssystemversion eine App mindestens unterstützen muss, damit sie PlayStore bzw. Apple Store verteilt werden kann. Betroffen sind neue Apps aber auch Updates für bestehende Apps. Zurzeit muss mindestens Android 13 bzw. iOS 16 unterstützt werden. Beide Vorgaben werden nächstes Jahr weiter angehoben.
Eine Migration auf .NET MAUI wird somit erforderlich, um weiterhin App Updates zu verteilen oder um die neusten Features von Android bzw. iOS nutzen zu können.
Wie aufwendig ist eine Migration?
Der Aufwand einer Migration hängt von verschiedenen Faktoren ab.
Die Wichtigsten sind:
- Wurden eigene Binding-Projekte erstellt, um native Bibliotheken einzubinden? In diesem Fall müssen diese ebenfalls migriert werden.
- Updates von verwendeten 3rd-Party Bibliotheken. Je nach Versionsverlauf kann es mehr oder weniger aufwendig sein, um 3rd-Party Bibliotheken zu aktualisieren.
Die von der Community entwickelte und sehr häufig verwendete Xamarin.Essentials Bibliothek wurde in .NET MAUI aufgenommen. Wurde diese verwendet, müssen die Imports entsprechend angepasst werden.
Falls eine Bibliothek nicht mehr weiterentwickelt wurde und .NET MAUI nicht unterstützt, so muss eine aktuelle Alternative gefunden werden.
Weiter kann es auch Sinn machen auf .NET Runtime Bibliotheken zu wechseln. Etwa für Logging oder Dependency Injection. - Ist die App von den Verhaltensänderungen der Layout-Komponenten betroffen?
- Wurden Custom Renderer eingesetzt, um das Aussehen von nativen UI-Elementen anzupassen? Diese müssen auf die leichtgewichtigeren Custom Handler umgeschrieben werden.
Weitere Gründe für eine Migration zu .NET MAUI
Future-Proofing
Die Migration auf .NET MAUI ist nicht nur notwendig, um den Support und die Kompatibilität mit Android und iOS aufrechtzuerhalten, sondern ermöglicht auch die Nutzung der neuesten Features dieser Plattformen. Auch kommt man in den Genuss der neusten .NET-Features, stark erhöhte Performance und Tooling-Verbesserungen. .NET 8 ist ausserdem ein LTS-Release (Long Term Support) und wird bis November 2026 unterstützt.
Performance
.NET MAUI wird kontinuierlich optimiert und nutzt die neusten Leistungsoptimierungen von .NET 8, was sich in kürzeren Startzeiten, kleineren App-Grössen und einem optimierten Memory-Footprint zeigt. Insbesondere die Bestrebungen bezüglich Ahead-of-time Kompilierung (AOT) versprechen in Zukunft weitere Performance-Verbesserungen. Schon jetzt kann mit dem aktuell noch experimentellen NativeAOT Feature unter iOS eine Halbierung der App-Grösse und eine 50% schneller Startzeit beobachtet werden.
Erleichterte Entwicklung
Die Entwicklung mit .NET MAUI bietet verschiedene Erleichterungen verglichen mit Xamarin. Zum Beispiel erleichtert die neue “Single Project Structure” die Verwaltung von Ressourcen. Schriftarten, Grafiken und Icons müssen nicht mehr pro Plattform einzeln verwaltet werden. Zudem entfällt dank SVG-Support auch die Aufbereitung von Grafiken für verschiedenste Auflösungen.
Wollte man bei einer Plattform spezifische UI-Anpassungen vornehmen, war dies mit Xamarin durch CustomRenderer ermöglicht. Diese wurden in .NET MAUI durch Handler ersetzt und erlauben einen einfacheren Zugriff auf die nativen Controls und benötigen weniger Boilerplate-Code.
Auch das Tooling rund um die Entwicklung erfährt immer wieder Verbesserungen. Etwa die Hot-Reload-Funktion, welche schnellere Feedback-Loops während der Entwicklung erlaubt. Neuerdings ist zusätzlich ein Live Property Explorer dazu gekommen, welcher das Inspizieren vom UI während der Laufzeit vereinfacht.
Als weiteres Beispiel kann ein neuer Roslyn Analyzer genannt werden, welcher via statischer Code-Analyse beim Aufspüren von möglichen Memory-Leaks hilft.
Fazit
Wenn Sie Xamarin-Apps im Einsatz haben, ist es ratsam, sich jetzt mit der Migration zu .NET MAUI zu beschäftigen, um zukünftige App-Updates sicherzustellen und von den Verbesserungen in .NET 8 zu profitieren. Die rechtzeitige Migration vermeidet ungeplante, stressige Zwangsmigrationen aufgrund von Sicherheitslücken oder Änderungen in den Store-Richtlinien. Zudem wurden mit dem neuen .NET 8 Release diverse Stabilisierungen umgesetzt und das Tooling weiter verbessert, um die Entwicklung zu vereinfachen.