.NET MAUI est un framework multiplateforme de Microsoft pour créer des applications natives en C# et XAML, publié en 2022 avec .NET 6. Selon la Microsoft .NET MAUI Documentation, 2024, MAUI prend en charge iOS, Android, Windows, macOS et Tizen, les réunissant dans un projet unique avec une base de code commune. Le framework est le successeur direct de Xamarin.Forms.
Points clés
.NET MAUI (Multi-platform App UI) est une évolution de Xamarin.Forms, reconstruite de zéro pour .NET 6+. Contrairement à Xamarin.Forms, qui nécessitait des projets séparés pour chaque plateforme, MAUI utilise une structure unique avec un fichier .csproj partagé et des dossiers de plateforme Platforms/iOS, Platforms/Android, Platforms/Windows et Platforms/MacCatalyst. La première version stable de MAUI a été publiée en mai 2022.
La principale différence entre .NET MAUI et son prédécesseur est l’intégration complète avec .NET 8 BCL (Base Class Library). Les développeurs ont accès directement à System.Text.Json, System.Net.Http, System.Linq, System.IO et d’autres API sans SDK supplémentaire. Xamarin.Forms utilisait .NET Standard 2.0 pour la logique partagée, ce qui limitait l’accès aux nouvelles capacités de la plateforme .NET.
Selon Microsoft Build 2024, .NET MAUI est utilisé dans plus de 40 000 applications sur l’App Store et Google Play. Parmi les projets notables figurent UPS Mobile, The Weather Channel et Siemens Teamcenter. Microsoft développe activement MAUI dans le cadre de .NET 9, prévu pour novembre 2024.
L’annonce de .NET MAUI a été faite lors de la Microsoft Build 2020 dans le cadre de la stratégie d’unification de .NET. Microsoft a fusionné .NET Core, Mono et .NET Framework en une seule plateforme .NET 5+. Xamarin.Forms est devenu la base de MAUI, mais la base de code a été entièrement réécrite : les API obsolètes ont été supprimées, les renderers ont été remplacés par des Handlers, DependencyService a été remplacé par un conteneur DI.
.NET MAUI 8 (novembre 2023) a ajouté la prise en charge de Native AOT, des performances améliorées de CollectionView, Blazor Hybrid (intégration de composants Blazor dans une application MAUI) et un nouveau mappage de polices. .NET MAUI 9 (2024) inclut la prise en charge de C# 12, une intégration améliorée avec WinUI 3 et macOS Sonoma, et une nouvelle API de glisser-déposer pour toutes les plateformes.
La première différence est une application unique. Dans Xamarin.Forms, iOS et Android nécessitaient deux projets séparés dans une solution. Dans .NET MAUI, un seul projet avec des dossiers de plateforme. Cela simplifie la navigation dans le code, la gestion des dépendances et les pipelines CI/CD. Le fichier .csproj utilise le format SDK-style avec TargetFrameworks : net8.0-android, net8.0-ios, net8.0-maccatalyst.
La deuxième différence est l’architecture de rendu utilisant des Handlers au lieu de renderers. Dans Xamarin.Forms, chaque élément (Button, Label) avait sa propre classe Renderer qui créait un contrôle natif. La personnalisation nécessitait un Custom Renderer. Dans MAUI, un Handler est un objet léger qui fait correspondre un élément abstrait à un contrôle natif et prend en charge les Property Mappers pour mettre à jour les propriétés sans recréer le contrôle.
La troisième différence est un conteneur DI unifié Microsoft.Extensions.DependencyInjection. Xamarin.Forms utilisait DependencyService pour enregistrer les implémentations de plateforme. MAUI intègre DI dans le cœur du framework : les services sont enregistrés dans MauiAppBuilder, les controleurs reçoivent les dépendances via le constructeur. Cela simplifie les tests et suit les pratiques modernes de .NET.
L’architecture de .NET MAUI est basée sur un modèle multicouche. La couche inférieure est .NET BCL et Mono Runtime (Android) / CoreCLR (Windows) / NativeAOT (iOS). La couche intermédiaire est Microsoft.Maui.dll avec le cœur du framework : Handlers, Layout, Graphics, Controls. La couche supérieure est l’application du développeur avec des pages XAML, ViewModel et des services.
Single Project est une caractéristique architecturale clé de .NET MAUI. Tous les fichiers sont divisés en trois catégories : code partagé (Shared), code de plateforme (Platforms) et ressources (Resources). Le multi-targeting dans .csproj spécifie pour quelles plateformes l’application est compilée. Chaque plateforme ne compile que son propre dossier Platforms et le code partagé.
Le code de plateforme est placé dans des dossiers conditionnels. Platforms/Android contient MainActivity.cs, MainApplication.cs et AndroidManifest.xml. Platforms/iOS — AppDelegate.cs, Info.plist et Entitlements.plist. Platforms/Windows — Package.appxmanifest et App.xaml. Pour la compilation conditionnelle, le code utilise les directives #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST.
XAML est un langage de balisage déclaratif hérité de Xamarin.Forms et WPF. Dans .NET MAUI, XAML est utilisé pour décrire les pages (ContentPage), les mises en page (VerticalStackLayout, Grid, FlexLayout), les éléments (Label, Entry, Button, Image) et les contrôles (CollectionView, CarouselView). XAML est compilé au format BAML au moment de la construction.
Le modèle MVVM est implémenté via CommunityToolkit.Mvvm — une bibliothèque open-source de Microsoft. L’attribut [ObservableProperty] génère des propriétés INotifyPropertyChanged, [RelayCommand] crée des commandes à partir de méthodes. Le CommunityToolkit.Mvvm 8.2 Source Generator transforme la classe partielle ViewModel, générant ObservableObject sans Reflection. Cela accélère le Binding de 30% par rapport à l’implémentation manuelle.
using Microsoft.Maui;
using Microsoft.Maui.Controls;
namespace MauiApp;
public class MainPage : ContentPage
{
public MainPage()
{
Title = "MAUI App";
Content = new VerticalStackLayout
{
Spacing = 12,
Padding = new Thickness(16),
Children =
{
new Label
{
Text = "Hello, .NET MAUI!",
FontSize = 24,
FontAttributes = FontAttributes.Bold
},
new Button
{
Text = "Cliquez-moi",
BackgroundColor = Colors.Blue,
TextColor = Colors.White,
Command = new Command(async () =>
await DisplayAlert("Bonjour", "Monde", "OK"))
}
}
};
}
}
.NET MAUI prend en charge 5 plateformes : iOS 15.0+, Android 5.0 (API 21)+, Windows 10 1809+, macOS 12.0+ (MacCatalyst) et Tizen 6.5+. Chaque plateforme utilise son propre ensemble de contrôles et d’API. iOS utilise UIKit via Mac Catalyst, Android — AndroidX via Xamarin.Android, Windows — WinUI 3, macOS — AppKit via Mac Catalyst.
Sur iOS et Android, MAUI utilise les mêmes mécanismes de rendu que Xamarin.Forms — des contrôles d’interface natifs. Cependant, les Handlers offrent une personnalisation plus flexible. Pour la configuration de Button spécifique à la plateforme sur iOS, OnPlatform<Button> avec PlatformConfiguration.iOS est utilisé. Pour Windows, MAUI utilise WinUI 3 — un framework d’interface moderne de Microsoft avec prise en charge de Fluent Design System.
La prise en charge de macOS a été ajoutée via Mac Catalyst — la technologie d’Apple qui exécute des applications UIKit sur Mac. Cela permet de réutiliser 100% du code iOS de MAUI pour la version macOS de l’application. Pour les fonctions spécifiques à Mac (Menu Bar, Touch Bar), MAUI fournit des API de plateforme via Mac Catalyst et des wrappers NSView.
Tizen est la plateforme Samsung pour Smart TV, smartphones et montres connectées. La prise en charge de Tizen dans .NET MAUI est implémentée via Samsung Tizen .NET. Les applications MAUI sont compilées pour Tizen via les bindings Samsung TizenFX. Cependant, Tizen n’est pas une plateforme prioritaire pour Microsoft — les mises à jour pour celle-ci sont publiées avec un retard de 1 à 2 mois.
| Plateforme | Version minimale | Framework UI | Statut |
|---|---|---|---|
| iOS | iOS 15.0 | UIKit (Mac Catalyst) | Stable |
| Android | API 21 (5.0) | AndroidX / Material 3 | Stable |
| Windows | Win 10 1809 | WinUI 3 / Fluent Design | Stable |
| macOS | macOS 12.0 | AppKit (Mac Catalyst) | Stable |
| Tizen | Tizen 6.5 | TizenFX / Samsung | Supplémentaire |
Base de code unifiée — .NET MAUI réduit la duplication de code. Un seul projet en C# et XAML compile pour 5 plateformes, fournissant jusqu’à 95% de code partagé pour les applications avec une interface simple. La logique métier, les services, les modèles de données et les clients HTTP se trouvent dans le code partagé. Seules les fonctionnalités spécifiques à la plateforme (appareil photo, géolocalisation, biométrie) nécessitent des implémentations séparées via DI.
Les performances de .NET MAUI sont supérieures à celles de Xamarin.Forms. Les Handlers réduisent la surcharge de rendu : les tests de Microsoft montrent une réduction de 20 à 30% du temps de rendu d’écran par rapport à Xamarin.Forms 5.0. Native AOT sur iOS compile le code C# directement en instructions ARM64, éliminant la compilation JIT et réduisant le temps de démarrage de 40%.
Blazor Hybrid est une capacité unique de .NET MAUI. BlazorWebView intègre des composants Blazor directement dans une application MAUI. Les développeurs d’interfaces web peuvent réutiliser des composants Blazor (pages Razor, interop JS, styles CSS) dans l’application mobile. Blazor Hybrid fonctionne sur les 5 plateformes MAUI sans modifier le code des composants Blazor.
Écosystème .NET — accès à des milliers de paquets NuGet : Entity Framework Core pour les opérations de base de données, Serilog pour la journalisation, Polly pour les tentatives de requêtes HTTP, FluentValidation pour la validation. CommunityToolkit.Maui fournit des éléments d’interface prêts à l’emploi : Popup, Toast, Snackbar, SemanticScreenReader pour l’accessibilité. .NET MAUI s’intègre avec Azure, SignalR et Microsoft Graph SDK.
Outils de développement — Visual Studio 2022 et Rider de JetBrains. XAML Hot Reload met à jour l’interface sans redémarrer l’application en 1 à 2 secondes. C# Hot Reload (depuis .NET 6+) recompile une modification de méthode sans redémarrer le processus. Visual Studio Debugger, Profiler et IntelliCode complètent la boîte à outils pour le diagnostic des performances et la qualité du code.
Questions fréquentes
.NET MAUI est un framework multiplateforme de Microsoft pour créer des applications natives en C# et XAML pour iOS, Android, Windows, macOS et Tizen. C’est le successeur de Xamarin.Forms, intégré dans .NET 6+ et utilisant un projet unique (Single Project) au lieu de projets séparés pour chaque plateforme.
.NET MAUI utilise un projet unique, des Handlers au lieu de renderers, un conteneur DI intégré, Native AOT pour iOS et Blazor Hybrid. Xamarin.Forms nécessite des projets séparés pour chaque plateforme, utilise Custom Renderer pour la personnalisation de l’interface, DependencyService pour DI et ne prend pas en charge Blazor. .NET MAUI fait partie de .NET, Xamarin.Forms est un SDK séparé.
Oui, .NET MAUI prend en charge macOS via Mac Catalyst (version minimale macOS 12.0). Les applications iOS sur MAUI sont automatiquement compilées pour Mac sans modification de code. Pour les fonctions natives Mac (Menu Bar, Dock, Touch ID), des appels de plateforme via Mac Catalyst et des wrappers NSView dans le dossier Platforms/MacCatalyst sont utilisés.
Non, .NET MAUI n’est pas compatible avec les paquets Dart/Flutter. MAUI utilise l’écosystème .NET et les paquets NuGet. Pour les fonctionnalités spécifiques à la plateforme (appareil photo, Bluetooth, biométrie), des bibliothèques natives via Android Bindings (Kotlin/Java) et iOS Bindings (Objective-C/Swift) sont utilisées. CommunityToolkit.Maui fournit des wrappers prêts à l’emploi pour les scénarios courants.
La différence de performances est minime. .NET MAUI avec Handlers et Native AOT sur iOS atteint 95 à 98% des performances d’une application native SwiftUI. Sur Android, la différence avec une application Kotlin est de 3 à 7% dans les tests de rendu d’interface (Microsoft Benchmarks, 2024). Pour la plupart des applications professionnelles, la différence est imperceptible pour l’utilisateur.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi