.NET MAUI é um framework multiplataforma da Microsoft para criar aplicações nativas em C# e XAML, lançado em 2022 junto com o .NET 6. De acordo com a Microsoft .NET MAUI Documentation, 2024, o MAUI suporta iOS, Android, Windows, macOS e Tizen, unificando-os em um único projeto com uma base de código compartilhada. O framework é o sucessor direto do Xamarin.Forms.
Principais pontos
.NET MAUI (Multi-platform App UI) é uma evolução do Xamarin.Forms, reconstruída do zero para o .NET 6+. Ao contrário do Xamarin.Forms, que exigia projetos separados para cada plataforma, o MAUI usa uma estrutura única com um arquivo .csproj compartilhado e pastas de plataforma Platforms/iOS, Platforms/Android, Platforms/Windows e Platforms/MacCatalyst. O primeiro lançamento estável do MAUI foi em maio de 2022.
A principal diferença entre o .NET MAUI e seu antecessor é a integração completa com o .NET 8 BCL (Base Class Library). Os desenvolvedores obtêm acesso a System.Text.Json, System.Net.Http, System.Linq, System.IO e outras APIs diretamente sem um SDK adicional. O Xamarin.Forms usava .NET Standard 2.0 para lógica compartilhada, o que limitava o acesso a novos recursos da plataforma .NET.
De acordo com o Microsoft Build 2024, o .NET MAUI é usado em mais de 40.000 aplicações na App Store e no Google Play. Entre os projetos notáveis estão UPS Mobile, The Weather Channel e Siemens Teamcenter. A Microsoft está desenvolvendo ativamente o MAUI como parte do .NET 9, previsto para novembro de 2024.
O anúncio do .NET MAUI foi feito no Microsoft Build 2020 como parte da estratégia de unificação do .NET. A Microsoft fundiu .NET Core, Mono e .NET Framework em uma única plataforma .NET 5+. O Xamarin.Forms tornou-se a base para o MAUI, mas a base de código foi completamente reescrita: APIs obsoletas foram removidas, os renderizadores foram substituídos por Handlers, o DependencyService foi substituído por um contêiner DI.
.NET MAUI 8 (novembro de 2023) adicionou suporte para Native AOT, desempenho melhorado do CollectionView, Blazor Hybrid (incorporação de componentes Blazor em uma aplicação MAUI) e novo mapeamento de fontes. O .NET MAUI 9 (2024) inclui suporte para C# 12, integração melhorada com WinUI 3 e macOS Sonoma, e uma nova API de arrastar e soltar para todas as plataformas.
A primeira diferença é uma aplicação única. No Xamarin.Forms, iOS e Android exigiam dois projetos separados em uma solução. No .NET MAUI, um único projeto com pastas de plataforma. Isso simplifica a navegação no código, o gerenciamento de dependências e os pipelines de CI/CD. O arquivo .csproj usa o formato SDK-style com TargetFrameworks: net8.0-android, net8.0-ios, net8.0-maccatalyst.
A segunda diferença é a arquitetura de renderização usando Handlers em vez de renderizadores. No Xamarin.Forms, cada elemento (Button, Label) tinha sua própria classe Renderer que criava um controle nativo. A personalização exigia um Custom Renderer. No MAUI, um Handler é um objeto leve que mapeia um elemento abstrato para um controle nativo e suporta Property Mappers para atualizar propriedades sem recriar o controle.
A terceira diferença é um contêiner DI unificado Microsoft.Extensions.DependencyInjection. O Xamarin.Forms usava DependencyService para registrar implementações de plataforma. O MAUI incorpora DI no núcleo do framework: os serviços são registrados no MauiAppBuilder, os controladores recebem dependências através do construtor. Isso simplifica os testes e segue as práticas modernas do .NET.
A arquitetura do .NET MAUI é baseada em um modelo de múltiplas camadas. A camada inferior é .NET BCL e Mono Runtime (Android) / CoreCLR (Windows) / NativeAOT (iOS). A camada intermediária é Microsoft.Maui.dll com o núcleo do framework: Handlers, Layout, Graphics, Controls. A camada superior é a aplicação do desenvolvedor com páginas XAML, ViewModel e serviços.
Single Project é uma característica arquitetônica chave do .NET MAUI. Todos os arquivos são divididos em três categorias: código compartilhado (Shared), código de plataforma (Platforms) e recursos (Resources). O multi-targeting no .csproj especifica para quais plataformas a aplicação é compilada. Cada plataforma compila apenas sua própria pasta Platforms e o código compartilhado.
O código de plataforma é colocado em pastas condicionais. Platforms/Android contém MainActivity.cs, MainApplication.cs e AndroidManifest.xml. Platforms/iOS — AppDelegate.cs, Info.plist e Entitlements.plist. Platforms/Windows — Package.appxmanifest e App.xaml. Para compilação condicional, o código usa as diretivas #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST.
XAML é uma linguagem de marcação declarativa herdada do Xamarin.Forms e WPF. No .NET MAUI, o XAML é usado para descrever páginas (ContentPage), layouts (VerticalStackLayout, Grid, FlexLayout), elementos (Label, Entry, Button, Image) e controles (CollectionView, CarouselView). O XAML é compilado no formato BAML no momento da compilação.
O padrão MVVM é implementado através do CommunityToolkit.Mvvm — uma biblioteca de código aberto da Microsoft. O atributo [ObservableProperty] gera propriedades INotifyPropertyChanged, [RelayCommand] cria comandos a partir de métodos. O CommunityToolkit.Mvvm 8.2 Source Generator transforma a classe parcial ViewModel, gerando ObservableObject sem Reflection. Isso acelera o Binding em 30% em comparação com a implementação manual.
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 = "Clique em mim",
BackgroundColor = Colors.Blue,
TextColor = Colors.White,
Command = new Command(async () =>
await DisplayAlert("Olá", "Mundo", "OK"))
}
}
};
}
}
.NET MAUI suporta 5 plataformas: iOS 15.0+, Android 5.0 (API 21)+, Windows 10 1809+, macOS 12.0+ (MacCatalyst) e Tizen 6.5+. Cada plataforma usa seu próprio conjunto de controles e APIs. O iOS usa UIKit via Mac Catalyst, Android — AndroidX via Xamarin.Android, Windows — WinUI 3, macOS — AppKit via Mac Catalyst.
No iOS e Android, o MAUI usa os mesmos mecanismos de renderização que o Xamarin.Forms — controles de UI nativos. No entanto, os Handlers fornecem personalização mais flexível. Para configuração de Button específica da plataforma no iOS, usa-se OnPlatform<Button> com PlatformConfiguration.iOS. Para Windows, o MAUI usa WinUI 3 — um framework de UI moderno da Microsoft com suporte ao Fluent Design System.
O suporte para macOS foi adicionado via Mac Catalyst — a tecnologia da Apple que executa aplicações UIKit no Mac. Isso permite reutilizar 100% do código iOS do MAUI para a versão macOS da aplicação. Para recursos específicos do Mac (Menu Bar, Touch Bar), o MAUI fornece APIs de plataforma através do Mac Catalyst e wrappers NSView.
Tizen é a plataforma da Samsung para Smart TV, smartphones e smart watches. O suporte ao Tizen no .NET MAUI é implementado através do Samsung Tizen .NET. As aplicações MAUI são compiladas para Tizen através dos bindings Samsung TizenFX. No entanto, o Tizen não é uma plataforma prioritária para a Microsoft — as atualizações para ela são lançadas com um atraso de 1 a 2 meses.
| Plataforma | Versão mínima | Framework UI | Status |
|---|---|---|---|
| iOS | iOS 15.0 | UIKit (Mac Catalyst) | Estável |
| Android | API 21 (5.0) | AndroidX / Material 3 | Estável |
| Windows | Win 10 1809 | WinUI 3 / Fluent Design | Estável |
| macOS | macOS 12.0 | AppKit (Mac Catalyst) | Estável |
| Tizen | Tizen 6.5 | TizenFX / Samsung | Adicional |
Base de código unificada — o .NET MAUI reduz a duplicação de código. Um único projeto em C# e XAML compila para 5 plataformas, fornecendo até 95% de código compartilhado para aplicações com UI simples. A lógica de negócios, serviços, modelos de dados e clientes HTTP estão no código compartilhado. Apenas recursos específicos da plataforma (câmera, geolocalização, biometria) exigem implementações separadas via DI.
O desempenho do .NET MAUI é superior ao do Xamarin.Forms. Os Handlers reduzem a sobrecarga de renderização: os testes da Microsoft mostram uma redução de 20 a 30% no tempo de renderização de tela em comparação com o Xamarin.Forms 5.0. O Native AOT no iOS compila o código C# diretamente em instruções ARM64, eliminando a compilação JIT e reduzindo o tempo de inicialização em 40%.
Blazor Hybrid é uma capacidade única do .NET MAUI. O BlazorWebView incorpora componentes Blazor diretamente em uma aplicação MAUI. Desenvolvedores de interfaces web podem reutilizar componentes Blazor (páginas Razor, interop JS, estilos CSS) na aplicação móvel. O Blazor Hybrid funciona em todas as 5 plataformas MAUI sem alterar o código dos componentes Blazor.
Ecossistema .NET — acesso a milhares de pacotes NuGet: Entity Framework Core para operações de banco de dados, Serilog para registro, Polly para repetição de solicitações HTTP, FluentValidation para validação. O CommunityToolkit.Maui fornece elementos de UI prontos: Popup, Toast, Snackbar, SemanticScreenReader para acessibilidade. O .NET MAUI integra-se com Azure, SignalR e Microsoft Graph SDK.
Ferramentas de desenvolvimento — Visual Studio 2022 e Rider da JetBrains. O XAML Hot Reload atualiza a UI sem reiniciar a aplicação em 1 a 2 segundos. O C# Hot Reload (a partir do .NET 6+) recompila uma alteração de método sem reiniciar o processo. O Visual Studio Debugger, Profiler e IntelliCode complementam o conjunto de ferramentas para diagnóstico de desempenho e qualidade de código.
Perguntas frequentes
.NET MAUI é um framework multiplataforma da Microsoft para criar aplicações nativas em C# e XAML para iOS, Android, Windows, macOS e Tizen. É o sucessor do Xamarin.Forms, integrado ao .NET 6+ e usa um único projeto (Single Project) em vez de projetos separados para cada plataforma.
.NET MAUI usa um único projeto, Handlers em vez de renderizadores, um contêiner DI integrado, Native AOT para iOS e Blazor Hybrid. O Xamarin.Forms exige projetos separados para cada plataforma, usa Custom Renderer para personalização de UI, DependencyService para DI e não suporta Blazor. .NET MAUI é parte do .NET, Xamarin.Forms é um SDK separado.
Sim, o .NET MAUI suporta macOS via Mac Catalyst (versão mínima macOS 12.0). As aplicações iOS no MAUI são automaticamente compiladas para Mac sem alterações de código. Para recursos nativos do Mac (Menu Bar, Dock, Touch ID), são usadas chamadas de plataforma através do Mac Catalyst e wrappers NSView na pasta Platforms/MacCatalyst.
Não, o .NET MAUI não é compatível com pacotes Dart/Flutter. O MAUI usa o ecossistema .NET e pacotes NuGet. Para recursos específicos da plataforma (câmera, Bluetooth, biometria), são usadas bibliotecas nativas através de Android Bindings (Kotlin/Java) e iOS Bindings (Objective-C/Swift). O CommunityToolkit.Maui fornece wrappers prontos para cenários comuns.
A diferença no desempenho é mínima. O .NET MAUI com Handlers e Native AOT no iOS atinge 95–98% do desempenho de uma aplicação nativa SwiftUI. No Android, a diferença com uma aplicação Kotlin é de 3–7% em testes de renderização de UI (Microsoft Benchmarks, 2024). Para a maioria das aplicações empresariais, a diferença é imperceptível para o usuário.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também