Migration von Xamarin auf .NET MAUI

Ein Leitfaden für eine reibungslose Migration

Bei der Entwicklung von Mobile Apps im Cross Platform-Ansatz gibt es verschiedene Möglichkeiten, Technologien und Frameworks, aus denen man wählen kann. Wer auf C# und die .NET-Plattform setzen möchte, hat sich vor einigen Jahren womöglich für das Xamarin Framework entschieden. 2011 zunächst als unabhängiges Unternehmen gegründet, wurde es 2016 von Microsoft gekauft und konsequent weiterentwickelt. Mit der .NET Multi-platform App UI (.NET MAUI) ist im Mai 2023 der geistige Nachfolger des Xamarin Frameworks erschienen. In diesem Artikel schauen wir uns an, welche Gründe für eine Migration sprechen, welche Schritte dafür notwendig sind und welches Potential darin steckt.

Gründe für die Migration

Gründe, die für eine Migration einer Xamarin App zu .NET MAUI sprechen, gibt es viele. Allem voran steht hier aber, dass die Unterstützung für Xamarin durch Microsoft am 1. Mai 2024 ausgelaufen ist. Es wird also keine Updates mehr für das Framework geben. Wer heute moderne Cross Platform-App-Entwicklung auf der .NET-Plattform betreiben möchte und aktuell das Xamarin Framework verwendet, muss seine App früher oder später zu .NET MAUI migrieren. Was zunächst erstmal nur nach Arbeit klingt, bietet aber auch Potential, die eigene App von Grund auf zu modernisieren.

Verbesserte Laufzeitgeschwindigkeit

Microsoft verspricht, dass .NET MAUI-Apps im Vergleich zu Xamarin-Apps schneller laufen. Sowohl die Startzeit als auch die eigentliche Geschwindigkeit der App sollen (auch durch den Umzug auf .NET 8, mehr dazu im nächsten Abschnitt) deutlich verbessert sein.

Potential von modernem .NET und C# nutzen

Das Xamarin-Framework läuft auf der Mono CLR (Common Language Runtime), einer .NET-Laufzeitumgebung, die ursprünglich als Open Source-Alternative zu Microsofts proprietärem .NET Framework entwickelt wurde. Inzwischen ist auch die Microsoft-eigene .NET CLR (aktuell .NET 8) Open Source. Sie dient als Basis für .NET MAUI und ermöglicht auch zukünftig die Nutzung der aktuellen C#-Version (derzeit C# 12).

Mit C# 12 stehen zahlreiche neue Sprachfeatures zur Verfügung, darunter Primary Constructors, Implicit Usings, Collection Expressions sowie weiter verbessertes Pattern Matching.

Das stabilere Hot Reload unter .NET 8 erlaubt ein zügiges Arbeiten, da Anpassungen am UI ohne Neustart der App direkt sichtbar werden.

Plattform-spezifische UI-Anpassungen lassen sich in .NET MAUI mit Hilfe der neuen Handler-Architektur bequem durchführen.

Die .NET MAUI-Extension für Visual Studio Code ermöglicht es Entwickler:innen zukünftig, mit Visual Studio Code einen modernen Texteditor für die Entwicklung von .NET MAUI-Apps zu verwenden, der auf die eigenen Bedürfnisse angepasst werden kann. Die Extension dient unter macOS zukünftig auch als Ersatz für Visual Studio for Mac, dessen Support im August 2024 ebenfalls ausläuft.

Plattform-spezifischer Code mit Multi Targeting

Auch wenn bei einer Migration zu .NET MAUI zunächst weiterhin die gewohnte Multi Project-Struktur verwendet werden kann (was vielleicht sogar empfehlenswert ist, mehr dazu später). Durch das verbesserte Multi Targeting müssen plattform-spezifische Dateien zukünftig nicht mehr in separaten Projekten vorgehalten werden. Sie können einfach in entsprechenden Plattform-Ordnern abgelegt werden:

Multi-Targeting Ordnerstruktur bei Migration von Xamarin zu .NET MAUI

Zusätzlich kann plattform-spezifischer Code entweder durch Datei-basiertes Multi Targeting in verschiedenen Dateien (YourClass.Android.cs, YourClass.iOS.cs) abgelegt oder durch Conditional Compilation innerhalb einer Datei aufgerufen werden:

public class YourClass
{
    public void YourMethod()
    {
#if ANDROID
        // Code for Android
#elif IOS
        // Code for iOS
#endif       
    }
}

Verbessertes Asset Handling

Zur Einbindung von Bildern und Grafiken war es bisher notwendig, für jede unterstützte Plattform eigene Assets zu hinterlegen, bei Rastergrafiken ggf. noch jeweils in unterschiedlichen Größen.

Das ist mit .NET MAUI nun nicht mehr notwendig. Ein Bild oder eine Grafik muss nur noch in einer Basisgröße im Projekt hinterlegt werden, z.B. als SVG-Datei. Den Rest übernimmt dann das Tooling: Beim Kompilieren werden die Grafiken für die verschiedenen Plattformen automatisch erzeugt.

Vorbereitungen: Migration von Xamarin Native Apps

Für Xamarin Native Apps, bei denen im Gegensatz zur Umsetzung mit dem moderneren Xamarin.Forms das UI vollständig plattform-spezifisch implementiert wurde, gibt es in .NET MAUI keinen Ersatz.

Da die Umstellung der UI auf Xamarin.Forms jedoch aufwendig sein kann, bietet es sich an, zunächst die übrigen Teile der App auf .NET MAUI umzustellen und anschließend das UI direkt in .NET MAUI umsetzen.

Auf Xamarin.Forms 5 aktualisieren

Zunächst sollte man sicherstellen, dass die App auf die aktuelle Version Xamarin.Forms 5 aktualisiert ist. Außerdem ist es empfehlenswert, auch alle anderen verwendeten Bibliotheken auf die jeweils neueste Version zu aktualisieren.

Umstellung auf SDK Style-Projekte

Falls noch nicht geschehen gilt es, die Projekte innerhalb der Visual Studio Solution auf das SDK-Style Projektformat umzustellen. Das modernere Format ist Voraussetzung für .NET MAUI-Projekte und ist im Vergleich zum Legacy-Format deutlich übersichtlicher. Zur einfachen Konvertierung eines Projekts befindet sich im Projekt-Kontextmenü in Visual Studio eine entsprechende Funktion:

Ob ein Projekt bereits auf das SDK Style-Format umgestellt wurde, ist an der Struktur der *.csproj-Datei einfach zu erkennen:

Legacy Format:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <!— (...) -->
</Project>

SDK-Style-Format:

<Project Sdk="Microsoft.NET.Sdk">
    <!— (...) -->
</Project>

Migration

Zunächst eine gute Nachricht: Vorausgesetzt eine App wurde mit einer sauberen Architektur und Schichtentrennung umgesetzt, z.B. unter Verwendung des Model-View-ViewModel – Patterns (MVVM), muss sie keinesfalls komplett neu geschrieben werden. Die Migration wird sich zu großen Teilen in der UI-Schicht abspielen. Große Teile der App bleiben praktisch unverändert. Trotzdem sollte der Aufwand nicht unterschätzt werden.

Nicht notwendige Anpassungen vertagen

Es mag verlockend sein, bei der Umstellung auf .NET MAUI direkt das volle Potential des Frameworks ausschöpfen zu wollen. Es empfiehlt sich jedoch, den Fokus zunächst darauf zu legen, frühestmöglich wieder eine lauffähige Anwendung zu haben und nicht notwendige Anpassungen vorerst zu vertagen. Dazu zählen

  • die Umstellung auf die Single-Project-Struktur,
  • die Umstellung der Custom Renderer und Effekte auf die neue Handler-Architektur sowie
  • die Verwendung neuer .NET 8 Features wie z.B. global usings, die bei Einführung zu sehr unübersichtlichen Changesets im Code Review führen können.

Option 1: Migration mit dem .NET Upgrade Assistant

Um die Migration zu .NET MAUI zu unterstützen, hat Microsoft den .NET Upgrade Assistant um die Unterstützung für .NET MAUI-Projekte erweitert. Abhängig davon wie komplex ein Projekt ist, kann man damit bereits Erfolg haben. Das Tool wird sowohl als Extension für Visual Studio als auch als Command Line Tool angeboten. Es bietet neben der „In Place“-Option auch die Möglichkeit, ein Projekt „side-by-side“ zu migrieren. Dabei bleiben die ursprünglichen Projektdateien während der Migration zunächst erhalten. Das erlaubt einem, den migrierten Stand jederzeit mit dem alten Stand zu vergleichen.

Auch wenn das Tool einen Teil der Migration übernimmt, sind im Anschluss höchstwahrscheinlich noch manuelle Nacharbeiten nötig.

Option 2: Manuelle Migration

Falls die Migration der App mit den .NET Upgrade Assistant nicht erfolgreich verläuft, gibt es die Möglichkeit der manuellen Migration.

Schritt 1: Umstellung des Target-Frameworks auf .NET 8

Als erstes muss das Target-Framework der vorhandenen Projekte auf .NET 8 umgestellt werden. Das geht am einfachsten, indem Sie in Visual Studio für jedes Projekt zunächst eine neue .NET MAUI Class Library erstellen und die ursprünglichen Projektdateien in das neue Projekt kopieren:

Target Framework bei manueller Migration

HINWEIS:
Durch die Umstellung eines Projekts auf .NET 8 kann es notwendig sein, NuGet-Pakete ebenfalls auf eine Version zu aktualisieren, die mit .NET 8 kompatibel ist. Ist keine .NET 8-kompatible Version einer Bibliothek verfügbar, muss sie gegebenenfalls durch eine andere Bibliothek ersetzt werden.

Schritt 2: Namespaces aktualisieren

Im nächsten Schritt müssen in allen Klassen die Xamarin.Forms.* Namespace-Definitionen durch die neuen Microsoft.Maui Namespaces ersetzt werden. Ein Einfaches „Suchen und Ersetzen“ wird hier jedoch nicht funktionieren, da in .NET MAUI auch Teile des Frameworks konsolidiert und in neue Namespaces umgezogen wurden. Eine genaue Übersicht über die neuen Namespaces gibt es hier.

Zusätzlich muss der Default-Namespace in Layout-Dateien (XAML) (vorher xmlns=“http://xamarin.com/schemas/2014/forms“) angepasst werden:

<ContentPage   xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
                    (...) >
     <!-- (Page content) -->
</ContentPage>

Schritt 3: Breaking Changes von APIs behandeln

Neben dem Umzug von Komponenten in andere Namespaces haben sich in .NET MAUI auch einige APIs geändert. Dazu zählen unter anderem:

  • Anpassungen am Layout-System
  • Anpassungen an den Klassen für die Interaktion mit dem Gerät
  • Anpassungen an den Color Types

Dementsprechend können weitere Angleichungen am Code notwendig sein. Eine gute Übersicht über potenziell notwendige Maßnahmen gibt es hier.

Eine gute Nachricht gibt es noch zu Xamarin Essentials: Die Bibliothek, die Xamarin.Forms um viele Basis- und Plattformfunktionalitäten erweitert, musste üblicherweise separat nachinstalliert werden. Das hat sich bei .NET MAUI nun geändert. Ihre Funktionen wurden direkt in das Framework integriert.

Schritt 4: App testen

Zum Schluss sollte die App ausgiebig getestet werden. Auch wenn .NET MAUI im Vergleich zu Xamarin.Forms in vielerlei Hinsicht eine Verbesserung darstellt, ist das Framework nicht perfekt. Einen Überblick über bereits bekannte Herausforderungen finden Sie auf github.

Nachbereitung

Hat man die essenziellen Schritte der Migration abgeschlossen und wieder eine lauffähige App vorliegen, kann man sich nach und nach weiteren Anpassungen widmen und so das volle Potential von .NET MAUI ausschöpfen.

Fazit

Es gibt viele Gründe, die für die Migration einer Xamarin App zu .NET MAUI sprechen. Eine gute Vorbereitung und ein sauberes Vorgehen tragen maßgeblich zum Erfolg der Migration bei. Der .NET Upgrade Assistant kann dabei unterstützen. Es ist empfehlenswert, sich bei der Migration zunächst auf die notwendigen Änderungen zu beschränken und alle weiteren Anpassungen nach und nach vorzunehmen.

Sie benötigen Unterstützung bei der Migration Ihrer Xamarin App zu .NET MAUI? Unser Expertenteam unterstützt Sie gerne. Nähere Infos und die Möglichkeit einer direkten Kontaktaufnahme finden Sie hier.

Weitere Quellen

https://learn.microsoft.com/en-us/dotnet/maui/migration/?view=net-maui-8.0
https://learn.microsoft.com/en-us/dotnet/maui/migration/native-essentials?view=net-maui-8.0
https://www.syncfusion.com/blogs/post/xamarin-versus-net-maui
https://docs.telerik.com/devtools/maui/migrate-to-net-maui

Mehr zum Thema Cross Platform-Entwicklung

×
Telefon

Sie sind auf der Suche nach einem Experten im Bereich App-Entwicklung? Wir freuen uns auf Ihre Nachricht!

+49 231 99953850
×