.NET MAUI: Microsofts neue GUI-Bibliothek für Windows, Android, iOS und macOS

Mit der .NET Multi-Platform App UI führt Microsoft Xamarin und .NET nun endlich zur einer Cross-Plattform-Bibliothek zusammen. Linux geht dabei leer aus.

In Pocket speichern vorlesen Druckansicht 31 Kommentare lesen

(Bild: Nina Janesikova/Shutterstock.com)

Lesezeit: 10 Min.
Von
  • Dr. Holger Schwichtenberg
Inhaltsverzeichnis

Unmittelbar vor der Microsoft Build-Konferenz 2022 sind die fertige Version der .NET Multi-Platform App UI (.NET MAUI) sowie der zugrundeliegenden Implementierungen von .NET für iOS, Android und macOS erschienen. Unter Windows läuft MAUI auf der Basis von Windows App SDK und Windows UI Library 3. Für den Linux-Desktop liefert Microsoft keine Implementierung (s. Abb. 1). Ein von dem Microsoft-Entwickler Javier Suárez angeführtes Community-Projekt für eine auf Linux lauffähige Implementierung auf Basis von GtkSharp steckt noch in den Kinderschuhen. Eine MAUI-Implementierung für Tizen, die nicht von Microsoft stammt, lässt sich hingegen über die .NET-Kommandozeilenwerkzeuge installieren, und zwar mit folgendem Befehl: dotnet workload install maui-tizen.

Plattformen für .NET MAUI (Abb. 1)

(Bild: Microsoft )

MAUI ist der direkte Nachfolger von Xamarin Forms. Wie bisher beschreiben Entwicklerinnen und Entwickler die Oberflächen mit der Extensible Application Markup Language (XAML). Bei den Steuerelementen und dem Rendering gibt es neben einigen neuen Funktionen wie Grid, FlexLayout, HorizontalStackLayout, VerticalStackLayout und dem Öffnen mehrerer Fenster auch Breaking Changes. So entfallen Steuerelemente wie CorouselPage, die in Xamarin.Forms als veraltet (deprecated) markiert waren. In einem Blogeintrag listet Microsoft zahlreiche Drittanbieter auf, die bereits Steuerelementbibliotheken und andere Zusatzfunktionen für .NET MAUI bereitstellen.

Auch wenn Microsoft in seinen Blogeinträgen seit Monaten ausschließlich von .NET MAUI als Cross-Plattform-Möglichkeit spricht, gibt es weiterhin die Option, auch plattformspezifische Projekte zu erstellen. Nachfolger von Xamarin.Android ist .NET for Android mit dem .NET SDK Workload android. Aus Xamarin.iOS wurde .NET for iOS mit dem .NET SDK Workload ios. Für macOS gibt es die Workloads macos und maccatalyst sowie eine plattformspezifischen Workload für tvos. Jeder dieser Workloads liefert jeweils Projektvorlagen und Werkzeuge – Abbildung 2 listet die Vorlagen für iOS auf.

Plattformspezifische Vorlagen für reine iOS-Projekte ohne .NET MAUI (Abb. 2)

Die Oberfläche lässt sich in diesen Projekten dann aber weder mit XAML noch mit HTML erzeugen, sondern unter Verwendung der plattformspezifischen GUI-APIs oder einer zugehörigen XML-Syntax (s. Abb. 3).

Eine Android-Aktivität in einem reinen Android-Projekt gestalten (Abb. 3)

Im Browser läuft .NET MAUI nicht, denn der Browser versteht kein XAML und Microsoft liefert auch keine Übersetzung nach HTML/CSS. Entwickler können aber in .NET MAUI-Anwendungen HTML-Oberflächen auf Basis von Blazor integrieren und damit hybride Apps erstellen. Durch die Auslagerung der Blazor-Oberflächen in eine eigene DLL (Razor Class Library) ist es dann möglich, diese Oberflächen sowohl in einem .NET MAUI-Projekt auf Windows, Android, iOS und macOS als auch in einem reinen Blazor-Projekt im Webbrowser zu nutzen. Entwickler, die von der Nutzung mittels XAML-Oberflächen im Browser träumen, verweist der Microsoft-Produktmanager David Ortinau in einem Kommentar auf den kanadischen Anbieter "Uno Platform".

Eine hybride MAUI-App im Android-Emulator: der schwarze und weiße Bereich wird mit HTML gerendert, der lila Fußbereich inklusive überlagerndem .NET-Maskottchen mit XAML (Abb. 4)

Ursprünglich sollte es schon im 2020 erschienenen .NET 5.0 die Zusammenführung von .NET Framework, .NET Core und Mono/Xamarin zu "One .NET" geben. Auch zum Erscheinen von .NET 6.0 im November 2021 hatte Microsoft es noch nicht vollbracht, und die erste Version von MAUI liegt nun ein halbes Jahr später vor als geplant. Der am 23. Mai 2022 veröffentlichte Nachzügler trägt die Versionsnummer 6.0.312, die Pakete stehen bei GitHub sowie über NuGet bereit.

Während die .NET-Implementierungen für Android, iOS und macOS wie in der Xamarin-Ära auf der Mono-Laufzeitumgebung basieren, kommt einheitlich auf allen Plattformen die .NET 6.0-Klassenbibliothek zum Einsatz. So arbeitet nun die in .NET Core 1.0 eingeführte Standard Dependency Injection (Microsoft.Extensions.DependencyInjection) anstelle des Xamarin-eigenen Mechanismus. Die Namensräume haben sich von Xamarin.Forms, Xamarin.Platform und Xamarin.Essentials zu Microsoft.Maui.* geändert (s. Abb. 5). Als Programmiersprache lässt sich in einem .NET MAUI-Projekt nur C# verwenden. In einem Kommentar im Blogeintrag kritisiert ein Kunde die fehlende Unterstützung für Visual Basic .NET.

Geänderte Namensräume in .NET MAUI gegenüber Xamarin.Forms (Abb. 5)

(Bild: Microsoft)

Das ursprünglich für .NET MAUI angekündigte Entwicklungsmuster Model-View-Update (MVU) verbleibt unter dem Projektnamen "Comet" im experimentellen Status. Folgendes Listing zeigt eine .NET MAUI-Oberfläche mit einem Zähler im MVU-Codestil statt in XAML:

public class MyPage : View {

    readonly State<int> clickCount = new State<int> (1);

    public MyPage() {
        Body = () => new VStack {
            new Text (() => $"Click Count: {clickCount}"),
            new Button("Update Text", () => {
                clickCount.Value++;
            }
        };
    }
}

MAUI-Anwendungen nutzen das gleiche .NET-SDK-Projektformat wie alle .NET-6.0-Projekte. Alle Kommandozeilenwerkzeuge von .NET (.NET CLI) arbeiten mit .NET MAUI zusammen. Dank der im .NET SDK vorhandenen Fähigkeit, gleichzeitig für mehrere Plattformen zu übersetzen, lassen sich aus einem einzigen Projekt heraus Binärdateien für alle gewünschten Zielplattformen in einem gemeinsamen Arbeitsschritt kompilieren. Notwendige Fallunterscheidungen für plattformspezifische Ressourcen und Code sind durch Unterordner, Dateinamenskonventionen und Compilerdirektiven möglich. Mit diesem Mechanismus sind die bisher in Xamarin notwendigen Kopfprojekte pro Zielplattform nicht mehr zwingend erforderlich, optional können Entwickler aber bei der Multi-Projekt-Architektur bleiben.

Für die fertige Version von .NET MAUI benötigen Entwickler die am 23. Mai 2022 erschienene Version 17.3 Preview 1.1 von Visual Studio mit dem Workload .NET Multi-Platform App UI Development (s. Abb. 6).

Die Installation von .NET MAUI via Visual Studio v17.3 Preview 1.1 benötigt 7,26 GByte Speicherplatz auf der Festplatte (Abb. 6).

Nach der Installation von .NET MAUI sind die installierten Workloads und Projektvorlagen auch in der .NET CLI sichtbar, wie Abbildung 7 veranschaulicht. Unter den zusätzlich installierbaren Workloads (dotnet workload search) ist auch maui-tizen gelistet.

Anzeige der installierten .NET-CLI-Workloads und der darin gelieferten Projektvorlagen für Android-Apps sowie aller verfügbaren .NET-CLI-Workloads (Abb. 7)

Die MAUI-Entwicklung für XAML- und .NET-Code unterstützt Hot Reloading, also den in .NET 6.0 eingeführte Austausch und die Erweiterung des Codes in der laufenden Anwendung (in definierten Grenzen).

Zwar ist zur Build-Konferenz auch die erste stabile Version von Visual Studio for Mac erschienen, aber diese mit 17.0 bezifferte Version unterstützt noch kein MAUI. Dafür ist auf macOS das Visual Studio for Mac in der Version 17.3 Preview 1 notwendig. Die MAUI-Werkzeuge sollen erst im Laufe des Jahres 2022 als stabile Version erscheinen – so ganz fertig ist MAUI also noch nicht.

Für die Entwicklung von .NET MAUI-Anwendungen für macOS ist Visual Studio for Mac nicht zwingend erforderlich. Bei der Entwicklung auf einem Windows-PCs mit Visual Studio benötigen Developer aber eine Verbindung zu einem macOS-Rechner mit den Apple Build Tools.

In einem Schnelltest für diese Meldung zeigte sich, dass sowohl Visual Studio 2022 Preview 1.1 als auch die .NET CLI weder neue .NET MAUI-Projekte erstellen noch mit den Release-Candidate-Versionen erzeugte MAUI-Projekte übersetzen wollten. Die Ursache war eine auf den Entwicklungsrechnern vorhandene Installation der Preview 4-Version des .NET-7.0-SDK. Während sich die .NET CLI mit einer global.json-Datei zur Verwendung eines älteren SDKs zwingend lies, reagierte Visual Studio darauf nicht, wie das folgende Listing demonstriert: Die global.json-Datei zwingt die .NET CLI zur Verwendung des .NET-SDK 6.0.300, auch wenn .NET 7.0 Preview installiert ist.

{
  "sdk": {
    "version": "6.0.300"
  }
}

Die Deinstallation von .NET 7.0 Preview 4 brachte dafür die MAUI-Werkzeuge zum Laufen. Das Problem ist insofern logisch, weil es die .NET-MAUI-Workloads noch nicht für .NET 7.0 gibt – Microsoft hatte in dem Blogeintrag seine Kunden allerdings nicht darauf hingewiesen. Zudem wäre beim Start von Visual Studio eine Auswahl der SDK-Version wünschenswert, um auch in solchen Szenarien eine Koexistenz von Release- und Preview-Versionen zu ermöglichen.

In Zukunft soll es eine neue .NET-MAUI-Version immer gemeinsam mit dem neuen .NET-Release geben. Die nächste Version von .NET MAUI soll demzufolge schon im November 2022 zusammen mit .NET 7.0 erscheinen. Die erste Version von .NET MAUI erhält laut Blogeintrag 18 Monate lang Support (s. Abb. 8).

Screenshot: Aussage zum Support im Blogeintrag von Microsoft (Abb. 8)

Falls das so bleibt, würde die Unterstützung für .NET MAUI in .NET 6.0 also bereits im November 2023 enden, während .NET 6.0 insgesamt bis November 2024 im Support bliebe. Im Widerspruch zu der Aussage im Blog steht im MAUI-Policy-Bereich eine noch kürzere Angabe der Supportgarantie: ".NET MAUI 6.0 will be supported for 6 months after .NET MAUI 7.0 ships" (s. Abb. 9). Das Supportende wäre dann im Mai 2023 erreicht, in Summe also bereits nach rund einem Jahr.

Aussage zum Support im der offiziellen Support-Richtlinie (Abb. 9)

Die bisherigen Xamarin-Implementierungen (Xamarin.Android, Xamarin.iOS und Xamarin.Forms) will Microsoft – ausgehend vom letzten Haupt-Release im November 2021 – nach eigenen Angaben noch für zwei Jahre, also bis November 2023 unterstützen. Microsoft bietet ein Wiki für die Migration von Xamarin.Forms zu .NET MAUI. Eine Vergleichstabelle zwischen Xamarin.Forms und .NET MAUI findet sich auf GitHub.

Microsoft hatte die Firma Xamarin mit ihren gleichnamigen Cross-Platform-Produkten im Februar 2016 übernommen. Xamarin basiert auf dem 2001 von der Firma Ximian gegründeten Mono-Projekt, einer Cross-Platform-Nachprogrammierung des klassischen Microsoft .NET Framework, das es nur für Windows gab und gibt. Ximian wurde 2003 von Novell übernommen. Eine kommerzielle Bedeutung bekam Mono erst mit dem Aufkommen der mobilen Betriebssysteme iOS und Android. Im September 2009 erschien MonoTouch für iPhone, iPod und iPad, und im April 2011 folgte Mono for Android. Nach der Übernahme von Novell durch Attachmate gründete sich die Mono-Entwicklungsabteilung in die neue Firma Xamarin aus. Seit der Übernahme 2016 arbeitete Microsoft an der Zusammenführung der Codebasen und dem Ausbau von .NET zu einem echten Cross-Plattform-Framework.

Die offizielle Feier zum Release erfolgt am 24. Mai 2022 im Rahmen einer kostenfreien Online-Konferenz, in der mitteleuropäischen Zeitzone ab 17 Uhr bis gegen Mitternacht.

(sih)