.NET MAUI — это кроссплатформенный фреймворк Microsoft для создания нативных приложений на C# и XAML, выпущенный в 2022 году вместе с .NET 6. По данным Microsoft .NET MAUI Documentation, 2024, MAUI поддерживает iOS, Android, Windows, macOS и Tizen, объединяя их в единый проект с общей кодовой базой. Фреймворк является прямым преемником Xamarin.Forms.
Главное
.NET MAUI (Multi-platform App UI) — это эволюция Xamarin.Forms, переработанная с нуля под .NET 6+. В отличие от Xamarin.Forms, который требовал separate проекты для каждой платформы, MAUI использует единую структуру с общим .csproj файлом и платформенными папками Platforms/iOS, Platforms/Android, Platforms/Windows и Platforms/MacCatalyst. Первый стабильный релиз MAUI состоялся в мае 2022 года.
Ключевое отличие .NET MAUI от предшественника — полная интеграция с .NET 8 BCL (Base Class Library). Разработчики получают доступ к System.Text.Json, System.Net.Http, System.Linq, System.IO и другим API напрямую без дополнительного SDK. Xamarin.Forms использовал .NET Standard 2.0 для общей логики, что ограничивало доступ к новым возможностям платформы .NET.
По данным Microsoft Build 2024, .NET MAUI используется в 40 000+ приложений в App Store и Google Play. Среди известных проектов — UPS Mobile, The Weather Channel и Siemens Teamcenter. Microsoft активно развивает MAUI в рамках .NET 9, запланированного на ноябрь 2024 года.
Анонс .NET MAUI состоялся на Microsoft Build 2020 как часть стратегии .NET unification. Microsoft объединила .NET Core, Mono и .NET Framework в единую платформу .NET 5+. Xamarin.Forms стал основой для MAUI, но кодовая база была полностью переписана: устаревшие API удалены, рендереры заменены на Handlers, DependencyService заменён на DI-контейнер.
Версия .NET MAUI 8 (ноябрь 2023) добавила поддержку Native AOT, улучшенную производительность CollectionView, Blazor Hybrid (встраивание Blazor-компонентов в MAUI-приложение) и новый маппинг шрифтов. .NET MAUI 9 (2024) включает поддержку C# 12, улучшенную интеграцию с WinUI 3 и macOS Sonoma, а также новый Drag & Drop API для всех платформ.
Первое отличие — единое приложение. В Xamarin.Forms для iOS и Android нужно было два отдельных проекта в одном решении. В .NET MAUI один проект с платформенными папками. Это упрощает навигацию по коду, управление зависимостями и CI/CD-конвейеры. Файл .csproj использует формат SDK-style с TargetFrameworks: net8.0-android, net8.0-ios, net8.0-maccatalyst.
Второе отличие — архитектура рендеринга через Handlers вместо рендереров. В Xamarin.Forms каждый элемент (Button, Label) имел свой класс Renderer, который создавал нативный контрол. Для кастомизации требовался Custom Renderer. В MAUI Handler — это лёгкий объект, который маппит абстрактный элемент на нативный контрол и поддерживает Property Mappers для обновления свойств без пересоздания контрола.
Третье отличие — единый DI-контейнер Microsoft.Extensions.DependencyInjection. Xamarin.Forms использовал DependencyService для регистрации платформенных реализаций. MAUI встраивает DI в ядро фреймворка: сервисы регистрируются в MauiAppBuilder, контроллеры получают зависимости через конструктор. Это упрощает тестирование и следует современным практикам .NET.
Архитектура .NET MAUI основана на многослойной модели. Нижний слой — .NET BCL и Mono Runtime (Android) / CoreCLR (Windows) / NativeAOT (iOS). Средний слой — Microsoft.Maui.dll с ядром фреймворка: Handlers, Layout, Graphics, Controls. Верхний слой — приложение разработчика с XAML-страницами, ViewModel и сервисами.
Single Project — это ключевая архитектурная особенность .NET MAUI. Все файлы разделены на три категории: общий код (Shared), платформенный код (Platforms) и ресурсы (Resources). Multi-targeting в .csproj указывает, для каких платформ собирается приложение. Каждая платформа компилирует только свою папку Platforms и общий код.
Платформенный код размещается в условных папках. Platforms/Android содержит MainActivity.cs, MainApplication.cs и AndroidManifest.xml. Platforms/iOS — AppDelegate.cs, Info.plist и Entitlements.plist. Platforms/Windows — Package.appxmanifest и App.xaml. Для условной компиляции в коде используются директивы #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST.
XAML — декларативный язык разметки, унаследованный от Xamarin.Forms и WPF. В .NET MAUI XAML используется для описания страниц (ContentPage), макетов (VerticalStackLayout, Grid, FlexLayout), элементов (Label, Entry, Button, Image) и контролов (CollectionView, CarouselView). XAML компилируется в BAML-формат на этапе сборки.
MVVM-паттерн реализуется через CommunityToolkit.Mvvm — библиотеку от Microsoft с открытым кодом. Атрибут [ObservableProperty] генерирует INotifyPropertyChanged-свойства, [RelayCommand] создаёт команды из методов. Source Generator CommunityToolkit.Mvvm 8.2 трансформирует partial class ViewModel, генерируя ObservableObject без Reflection. Это ускоряет Binding на 30% по сравнению с ручной реализацией.
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 = "Нажми меня",
BackgroundColor = Colors.Blue,
TextColor = Colors.White,
Command = new Command(async () =>
await DisplayAlert("Привет", "Мир", "OK"))
}
}
};
}
}
.NET MAUI поддерживает 5 платформ: iOS 15.0+, Android 5.0 (API 21)+, Windows 10 1809+, macOS 12.0+ (MacCatalyst) и Tizen 6.5+. Каждая платформа использует свой набор контролов и API. iOS использует UIKit через Mac Catalyst, Android — AndroidX через Xamarin.Android, Windows — WinUI 3, macOS — AppKit через Mac Catalyst.
На iOS и Android MAUI использует те же механизмы рендеринга, что и Xamarin.Forms — нативные UI-контролы. Однако Handlers обеспечивают более гибкую кастомизацию. Для платформенной настройки Button на iOS используется OnPlatform<Button> с PlatformConfiguration.iOS. Для Windows MAUI использует WinUI 3 — современный UI-фреймворк от Microsoft с поддержкой Fluent Design System.
macOS поддержка добавлена через Mac Catalyst — технологию Apple, которая запускает UIKit-приложения на Mac. Это позволяет переиспользовать 100% iOS-кода MAUI для macOS-версии приложения. Для специфических Mac-функций (Menu Bar, Touch Bar) MAUI предоставляет платформенные API через Mac Catalyst и NSView-обёртки.
Tizen — платформа Samsung для Smart TV, смартфонов и умных часов. Поддержка Tizen в .NET MAUI реализована через Samsung Tizen .NET. MAUI-приложения компилируются для Tizen через Samsung-биндинги TizenFX. Однако Tizen не является приоритетной платформой Microsoft — обновления для неё выходят с задержкой 1–2 месяца.
| Платформа | Минимальная версия | UI-фреймворк | Статус |
|---|---|---|---|
| iOS | iOS 15.0 | UIKit (Mac Catalyst) | Стабильный |
| Android | API 21 (5.0) | AndroidX / Material 3 | Стабильный |
| Windows | Win 10 1809 | WinUI 3 / Fluent Design | Стабильный |
| macOS | macOS 12.0 | AppKit (Mac Catalyst) | Стабильный |
| Tizen | Tizen 6.5 | TizenFX / Samsung | Дополнительно |
Единая кодовая база — .NET MAUI сокращает объём дублирования кода. Один проект на C# и XAML компилируется под 5 платформ, обеспечивая до 95% общего кода для приложений с простым UI. Бизнес-логика, сервисы, модели данных и HTTP-клиенты находятся в общем коде. Только платформенные фичи (камера, геолокация, биометрия) требуют отдельных реализаций через DI.
Производительность .NET MAUI выше, чем у Xamarin.Forms. Handlers сокращают накладные расходы на рендеринг: тесты Microsoft показывают сокращение времени отрисовки экрана на 20–30% по сравнению с Xamarin.Forms 5.0. Native AOT на iOS компилирует C#-код напрямую в ARM64-инструкции, исключая JIT-компиляцию и сокращая время запуска на 40%.
Blazor Hybrid — уникальная возможность .NET MAUI. BlazorWebView встраивает Blazor-компоненты прямо в MAUI-приложение. Разработчики веб-интерфейсов могут переиспользовать Blazor-компоненты (Razor-страницы, JS-интероп, CSS-стили) в мобильном приложении. Blazor Hybrid работает на всех 5 платформах MAUI без изменения кода Blazor-компонентов.
Экосистема .NET — доступ к тысячам NuGet-пакетов: Entity Framework Core для работы с базами данных, Serilog для логирования, Polly для повторных HTTP-запросов, FluentValidation для валидации. CommunityToolkit.Maui предоставляет готовые UI-элементы: Popup, Toast, Snackbar, SemanticScreenReader для доступности. .NET MAUI интегрируется с Azure, SignalR и Microsoft Graph SDK.
Инструменты разработки — Visual Studio 2022 и Rider от JetBrains. XAML Hot Reload обновляет UI без перезапуска приложения за 1–2 секунды. C# Hot Reload (с .NET 6+) перекомпилирует изменение метода без перезапуска процесса. Visual Studio Debugger, Profiler и IntelliCode дополняют набор инструментов для диагностики производительности и качества кода.
Часто задаваемые вопросы
.NET MAUI — это кроссплатформенный фреймворк Microsoft для создания нативных приложений на C# и XAML под iOS, Android, Windows, macOS и Tizen. Он является преемником Xamarin.Forms, встроен в .NET 6+ и использует единый проект (Single Project) вместо раздельных проектов для каждой платформы.
.NET MAUI использует единый проект, Handlers вместо рендереров, встроенный DI-контейнер, Native AOT для iOS и Blazor Hybrid. Xamarin.Forms требует раздельных проектов для каждой платформы, использует Custom Renderer для кастомизации UI, DependencyService для DI и не поддерживает Blazor. .NET MAUI — часть .NET, Xamarin.Forms — отдельный SDK.
Да, .NET MAUI поддерживает macOS через Mac Catalyst (минимальная версия macOS 12.0). iOS-приложения на MAUI автоматически компилируются для Mac без изменений кода. Для нативных Mac-функций (Menu Bar, Dock, Touch ID) используются платформенные вызовы через Mac Catalyst и NSView-обёртки в папке Platforms/MacCatalyst.
Нет, .NET MAUI несовместим с Dart/Flutter-пакетами. MAUI использует .NET-экосистему и NuGet-пакеты. Для платформенных фич (камера, Bluetooth, биометрия) используются нативные библиотеки через Android Bindings (Kotlin/Java) и iOS Bindings (Objective-C/Swift). CommunityToolkit.Maui предоставляет готовые обёртки для популярных сценариев.
Разница в производительности минимальна. .NET MAUI с Handlers и Native AOT на iOS достигает 95–98% производительности нативного SwiftUI приложения. На Android разница с Kotlin-приложением составляет 3–7% в тестах UI-рендеринга (Microsoft Benchmarks, 2024). Для большинства бизнес-приложений разница незаметна пользователю.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также