Mit .NET MAUI steht ein neues Framework für plattformübergreifende Apps aus dem Hause Microsoft bereit. Das Ziel ist es, alle wichtigen Gerätetypen und Plattformen mit C# und XAML zu bedienen. Desktop und Mobile Apps stehen dabei gleichermaßen im Fokus.
Die Bedeutung der Cross Plattform-Programmierung ist in der letzten Zeit größer geworden. Eine Reihe von Ansätzen versprechen den Entwicklern das lang ersehnte Ziel, den einmal geschriebenen Quellcode auf allen gewünschten Plattformen und Systemen zu einer Anwendung zu „formen“. Im nebenstehenden Textkasten: „Große Auswahl“ haben wir stichpunktartig die wichtigsten aktuellen Ansätze der Cross-Plattform-Programmierung notiert. Unabhängig von der konkreten Vorgehensweise ist es das Ziel der plattformübergreifenden Programmierung dem nativen Vorbild einer Applikation auf dem jeweiligen Zielsystem möglichst weitgehend zu entsprechen, d.h. die erstellten Applikationen sollen sich möglichst so verhalten, als hätte man diese exklusiv für das betreffende Betriebssystem bzw. Gerätekategorie programmiert.
Mit .NET MAUI möchte Microsoft sein Framework Xamarin für Android und iOS modernisieren und gleichzeitig die Architektur des Ansatzes aufräumen.

Wer plattformübergreifend Apps und Anwendungen erstellen will, hat jenseits der Entwicklung von Web-Anwendungen heute die Auswahl. Individuelle Nachteile können diese Vielfalt aber auch zur Qual werden lassen. Wichtige Ansätze sind demnach:

  • Xamarin: Programmiersprache C#; User Interface nativ oder deklarativ mit Hilfe von XAML; Entwicklungsumgebung: Visual Studio unter Windows oder macOS; das UI nutzt die Elemente der jeweiligen Plattform; es erfolgt eine generische UI-Definition mit Xamarin Forms.
  • RAD Studio: Programmiersprache: Delphi (Object Pascal); Gestaltung mittels UI-Designer; Plattformunabhängigkeit wird über Grafikframework FireMonkey erreicht; Entwicklungsumgebung RAD Studio unter Microsoft Windows; komponentenbasierter Ansatz für das UI; Nutzung von nicht visuellen Komponenten für andere Aufgaben; geräteübergreifende Entwicklung für Desktop und Mobile.
  • NativeScript: Programmiersprache TypeScript (JavaScript); UI wird deklarativ mittels JSX (JavaScript Syntax Extension) erstellt; Einsatz eines beliebigen Editors zum Beispiel Visual Studio Code; weitere Frameworks (Angular, Vue.js) können eingebunden werden.
  • React Native: Programmiersprache TypeScript (JavaScript); UI wird deklarativ mittels JSX erstellt; Einsatz eines beliebigen Editors, zum Beispiel Visual Studio Code; Erweiterung zur Web-Bibliothek React.
  • Flutter: Programmiersprache Dart; UI wird deklarativ direkt im Quellcode erstellt; Entwicklungsumgebungen Android Studio, IntelliJ IDEA; UI-Komponenten werden über die Rendering-Engine namens Skia gezeichnet.

Das wichtigste Feature eines Cross Plattform-Frameworks sind die unterstützten Systeme. Welche Gerätetypen und Plattformen kann ich erreichen? .NET MAUI nimmt eine Zweiteilung vor. First Class, d.h. direkt von Microsoft, werden die folgenden Betriebssysteme von .NET MAUI unterstützt:

  • Android ab Version 5.0 (API 21)
  • iOS ab Version 10
  • macOS ab Version 10.13
  • Windows Desktop und die Universal Windows Platform (UWP) mit dem UI Framework WinUI 3.
Bild: Plattformsupport von .NET MAUI [1].

Wenn Sie hier schon das eine oder andere System vermissen, dann täuscht Sie Ihr Gefühl nicht. Hierzu heißt es in der aktuellen Dokumentation [1], dass man den Support für die Systeme Tizen und Linux der Community überlässt. Tizen ist ein freies Betriebssystem, das auf Linux basiert. Es sollte ursprünglich Smartphones, Tablets, Netbooks sowie Infotainmentsysteme für Autos und TV-Hardware und Wearable Computing unterstützen. Aktuell findet es sich hauptsächlich in Smartwatches und einigen Fernsehern und Kameras von Samsung wieder. Das zugehörige GitHub Repository zum Einsatz der .NET-Technologie auf Tizen findet man unter [2]. Auch hier gibt es den Hinweis, dass es sich noch um eine frühe Preview-Version handelt. Wenn Sie sich für dieses Betriebssystem interessieren und eine Entwicklung mit .NET MAUI, .NET 6 und Visual Studio 2022 in Erwägung ziehen, dann steht dafür eine eigene Projektvorlage zur Verfügung. Diese wird über ein separates Workload in Visual Studio eingebunden, welches Sie ebenfalls unter den angegeben Link finden.
Kommen wir zu Linux. Der Linux-Support für .NET MAUI basiert in Bezug auf das Grafikframework auf der Bibliothek GtkSharp und ist eine Weiterentwicklung der Unterstützung für Xamarin.Forms für Linux-Systeme. Informationen und den Quellcode dazu findet man auch hier auf GitHub unter [3]. Der fehlende First Class Support von Linux wird durchaus von der Community kritisch diskutiert und gewertet. Einen interessanten Diskussionsfaden dazu findet man unter [4] und einen Artikel zum Thema unter [5].
Bleibt also zunächst die primäre Unterstützung der o.g. Betriebssysteme. Mit Blick auf Xamarin.Forms ist nun macOS als primärer Support dazugekommen. Dieses System wurde ursprünglich der Community überlassen.
Und was ist mit webbasierten Applikationen? Hier wird an einer Integration der Blazor-Technologie gearbeitet. Blazor ist ein Web-Framework, welches es erlaubt mit .NET, C# und der Razor-Syntax („Mischung“ von C# und HTML) Web-Anwendungen zu erstellen. Auch hier gibt es Bemühungen beide Technologien miteinander zu verbinden. Dazu wird ein Steuerelement namens BlazorWebView implementiert. Das ist in der Lage, Razor-Komponenten während der Laufzeit zu verarbeiten und das entsprechende HTML zu generieren. Ein stetiger Zugriff auf den Webserver ist nicht notwendig. Die App kann damit offline ausgeführt werden. Die App kann auch mit einer Remote-API und anderen Webdiensten kommunizieren, um Daten und Inhalte zur weiteren Verarbeitung bereitzustellen. Da alles lokal im selben Prozess wie die Anwendung läuft, ist der große Vorteil eine hohe Leistung und ein Zugriff auf Gerätefunktionen wie Kamera, On-Board-Sensoren, Dateisystem usw. Ein weiterer Vorteil ist die Wiederverwendung von Razor-Komponenten. Auch hier sind wir noch in einer experimentellen Phase. Erste Informationen finden sich dazu unter [6].
Fassen wir aus dieser Perspektive zusammen: .NET MAUI wird zunächst für die mobilen Plattformen Android und iOS und die Desktop-Betriebssysteme Windows auf der Basis von WinUI 3 und macOS zum Einsatz kommen. Ob spätere andere Systeme eine relevante Unterstützung erfahren werden, wird sich mit der Zeit herausstellen. Der technologische Unterbau ist .NET 6, die Basis ist das bestehende Xamarin.Forms.

Literatur und Links

[1] https://docs.microsoft.com/en-us/dotnet/maui/supported-platforms
[2] https://github.com/Samsung/Tizen.NET
[3] https://github.com/jsuarezruiz/maui-linux
[4] https://github.com/dotnet/maui/discussions/339
[5] https://visualstudiomagazine.com/articles/2021/08/19/maui-preview-7.aspx
[6] https://egvijayanand.in/2021/11/13/net-maui-blazor/
[7] https://github.com/dotnet/maui/wiki/Roadmap
[8] https://github.com/dotnet/maui/wiki/Xamarin.Forms-vs-.NET-MAUI
[9] https://www.xamarinhelp.com/basics-xamarin-forms-custom-renderers/
[10] https://www.xamarinhelp.com/basics-xamarin-forms-custom-renderers/
[11] https://docs.microsoft.com/de-de/dotnet/maui/user-interface/handlers/customize
[12] https://devblogs.microsoft.com/xamarin/the-new-net-multi-platform-app-ui-maui/