Встречайте платформу .NET MAUI, выход которой знаменует собой новую важную веху в многолетнем пути к унификации платформы .NET. Теперь у сообщества из более чем 5 миллионов разработчиков .NET есть первоклассный кроссплатформенный стек для разработки пользовательского интерфейса под Android, iOS, macOS и Windows, дополняющий инструментарий .NET (SDK) и базовую библиотеку классов (BCL). С помощью .NET теперь можно создать все, что угодно.
И это только начало большого пути по созданию инструментов для разработки десктопных и мобильных приложений, которые порадуют разработчиков .NET. На следующем этапе закладывается основа для расширения экосистемы .NET, чтобы перенести плагины, библиотеки и сервисы из .NET Framework и старой системы проектов в .NET 6 и проекты в стиле SDK.
План разработки .NET MAUI полностью соответствует Текущему расписанию релизов. Постоянное внимание в .NET MAUI по-прежнему сосредоточено на обеспечении качества, решении известных проблем и определении приоритетов на основе отзывов разработчиков. Также проводятся работы по поддержке и обновлению инструментов для разработки приложений, ориентированных исключительно на Android, Android Wear, CarPlay, iOS, macOS и tvOS, напрямую используя нативные инструментальные средства .NET и вспомогательные библиотеки AndroidX, Facebook, Firebase, Google Play Services и SkiaSharp.
С .NET MAUI вы можете достичь бескомпромиссного пользовательского опыта, написав и используя при этом больше общего кода, чем когда-либо прежде.
Нативный UI – никаких компромиссов
Основная цель .NET MAUI заключается в том, чтобы позволить разработчикам обеспечить в приложениях наилучший пользовательский опыт (UX) в соответствии с особенностями каждой платформы (Android, iOS, macOS, Windows, и Tizen благодаря сотрудничеству с Samsung), в то же время создавая свои уникальные бренды, благодаря богатым возможностям графики и стилизации. Прямо «из коробки» приложение на каждой платформе выглядит и ведет себя так, как должно, без каких-либо дополнительных виджетов или стилей, которые необходимо имитировать. Например, работа .NET MAUI на Windows обеспечивается благодаря WinUI 3 - главному компоненту нативного UI, который поставляется вместе с Windows App SDK.
Для разработки ваших приложений используйте C#, XAML и богатый инструментарий из более чем 40 готовых контролов, контейнеров (layouts) и экранов (pages). Опираясь на Xamarin контролы для мобильной разработки, .NET MAUI добавляет поддержку для десктопных приложений со множеством окон, различных меню и возможностей анимации, а также встроенную графику для отрисовки границ, форм, теней и др.
Доступность прежде всего
Одним из основных преимуществ использования нативного UI является унаследованная поддержка Accessibility, которую мы можем реализовать с помощью семантических сервисов. Это позволяет создавать приложения с широкими возможностями доступа проще, чем когда-либо. В рамках совместного сотрудничества с пользователями в .NET MAUI были улучшены инструменты разработки приложений с точки зрения доступности.
Разработаны семантические сервисы для управления:
- такими свойствами, как описание, подсказка и уровень заголовка;
- фокусом;
- устройством для чтения с экрана;
- автоматическими свойствами;
Не только UI
.NET MAUI предоставляет простые API для доступа к нативным («родным») сервисам и функциям каждой платформы, таким как акселерометр, действия приложения, файловая система, уведомления и многое другое. В примере ниже мы конфигурируем «действия приложения» - специальное меню с набором действий, вызываемое долгим нажатием на иконку приложения на каждой платформе:
AppActions.SetAsync( new AppAction("current_info", "Check Current Weather", icon: "current_info"), new AppAction("add_location", "Add a Location", icon: "add_location") );
Простая кастомизация
Расширяете ли вы возможности контролов .NET MAUI или создаете новый платформенный функционал, архитектура .NET MAUI рассчитана на масштабируемость, и у вас не возникнет проблем с этим. Рассмотрим, например, контрол ввода Entry - канонический пример контрола, который по-разному отображается на разных платформах. Android отрисовывает подчеркивание под текстовым полем, и разработчики часто хотят убрать это подчеркивание.
С .NET MAUI настройка Entry в масштабах всего проекта - это всего лишь несколько строк кода:
#if ANDROID Microsoft.Maui.Handlers.EntryHandler.Mapper.ModifyMapping("NoUnderline", (h, v) => { h.PlatformView.BackgroundTintList = ColorStateList.ValueOf(Colors.Transparent.ToPlatform()); }); #endif
Вот отличный недавний пример создания нового платформенного контрола Map от компании Cayas Software. Статья в блоге компании демонстрирует создание специального обработчика (handler) для контрола, его реализацию на каждой платформе, а затем обеспечение доступности контрола путем его регистрации в .NET MAUI.
.ConfigureMauiHandlers(handlers => { handlers.AddHandler(typeof(MapHandlerDemo.Maps.Map),typeof(MapHandler)); })
Производительность современного разработчика
Мы хотим, чтобы .NET не только была технологией, позволяющей создавать все, что угодно, но и повышала производительность разработчиков, используя общие возможности языка, паттерны и лучшие практики, а также инструментарий.
.NET MAUI использует новые возможности C# 10, представленные еще в .NET 6, включая глобальные операторы using и компактную запись пространства имен на уровне файла, что позволяет сократить бойлерплейт код в файлах. Также .NET MAUI выводит возможности мультитаргетинга на новый уровень благодаря подходу «один проект».
В новых проектах .NET MAUI файлы платформенного кода располагаются во вложенных папках, что позволяет разработчику сосредоточиться на приложении, не тратя времени на переключения между проектами платформ. В папке Resources вашего проекта есть единое место для управления всеми ресурсами приложения: шрифтами, изображениями, иконкой приложения, сплеш-экраном, активами (assets) и стилями. .NET MAUI выполнит всю необходимую работу по их оптимизации под уникальные требования каждой платформы.
При этом структура с отдельными проектами на каждую платформу по-прежнему доступна разработчикам.
.NET MAUI использует паттерн проектирования «Строитель», ставший популярным благодаря библиотекам Microsoft.Extensions в приложениях ASP.NET и Blazor, для инициализации и конфигурации приложения. С помощью него вы можете, например, зарегистрировать свои шрифты, подключиться к специфичным для платформы событиям жизненного цикла приложения, настроить зависимости, включить определенные функции, подключить сторонние сервисы и многое другое.
public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp() .ConfigureServices() .ConfigureFonts(fonts => { fonts.AddFont("Segoe-Ui-Bold.ttf", "SegoeUiBold"); fonts.AddFont("Segoe-Ui-Regular.ttf", "SegoeUiRegular"); fonts.AddFont("Segoe-Ui-Semibold.ttf", "SegoeUiSemibold"); fonts.AddFont("Segoe-Ui-Semilight.ttf", "SegoeUiSemilight"); }); return builder.Build(); } } public static class ServicesExtensions { public static MauiAppBuilder ConfigureServices(this MauiAppBuilder builder) { builder.Services.AddMauiBlazorWebView(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); #if WINDOWS builder.Services.TryAddSingleton<_SharedMauiLib.INativeAudioService2c_ SharedMauiLib.Platforms.Windows.NativeAudioService="">(); #elif ANDROID builder.Services.TryAddSingleton<_SharedMauiLib.INativeAudioService2c_ SharedMauiLib.Platforms.Android.NativeAudioService="">(); #elif MACCATALYST builder.Services.TryAddSingleton<_SharedMauiLib.INativeAudioService2c_ SharedMauiLib.Platforms.MacCatalyst.NativeAudioService="">(); builder.Services.TryAddSingleton< Platforms.MacCatalyst.ConnectivityService>(); #elif IOS builder.Services.TryAddSingleton<_SharedMauiLib.INativeAudioService2c_ SharedMauiLib.Platforms.iOS.NativeAudioService="">(); #endif builder.Services.TryAddTransient(); builder.Services.TryAddSingleton(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(_ => new ListenTogetherHubClient(Config.ListenTogetherUrl)); return builder; } }
Подробнее с информацией о конфигурации приложения в .NET MAUI и подходе «один проект» вы можете ознакомиться в официальной документации.
Оптимизация скорости работы приложения
.NET MAUI создана для производительности. В платформе реализованы механизмы для ускорения запуска приложения, особенно на Android. UI контролы в .NET MAUI реализуют тонкий, несвязанный паттерн проектирования обработчик-маппер (handler-mapper) над нативными платформенными контролами. Такой подход уменьшает количество слоев в логике визуализации UI и упрощает кастомизацию контролов.
Контейнеры в .NET MAUI были разработаны так, чтобы использовать паттерн последовательного управления, который оптимизирует этапы измерения (measure) и размещения (arrange) для более быстрой визуализации и обновления UI. Платформа также предоставляет контейнеры, предварительно оптимизированные для конкретных сценариев, такие как HorizontalStackLayout и VerticalStackLayout в дополнение к StackLayout.
С самого начала разработки .NET MAUI была поставлена цель улучшения производительности запуска приложения и уменьшения итогового размера приложения при переходе на .NET 6. На данный момент достигнуто улучшение производительности на 34.9% для .NET MAUI и на 39.4% для .NET for Android. Эти преимущества распространяются и на сложные, большие приложения; как пример, .NET Podcast приложение - улучшение производительности его запуска достигло 37.3% (с 1299 мс до 814.2 мс).
Соответствующие настройки оптимизации в Visual Studio включены по умолчанию для Release сборок.
Начните сегодня
Чтобы начать использовать .NET MAUI на Windows, установите или обновите Visual Studio 2022 до версии 17.4+.
Чтобы использовать .NET MAUI на Mac, установите новую версию Visual Studio 2022 для Mac (17.4+).
На Windows уже сегодня вы можете ускорить цикл разработки с помощью XAML и механизма .NET Hot Reload, а также мощных редакторов для XAML, C#, Razor и CSS. С помощью XAML Live Preview и Live Visual Tree вы можете предварительно просматривать, располагать и инспектировать элементы пользовательского интерфейса (UI), а также изменять UI в процессе отладки. Новый подход «один проект» в .NET MAUI теперь включает страницы свойств проекта для редактирования настроек приложений с мультиплатформенным таргетингом через визуальный интерфейс.
На Mac уже сегодня вы можете работать с решениями .NET MAUI, содержащими единый проект или несколько платформенных проектов, отлаживать их, используя все нативные средства Visual Studio 2022 для Mac. Другие улучшения производительности разработки приложений .NET MAUI будут представлены в последующих предварительных версиях.
Мы рекомендуем разработчикам начать обновлять библиотеки до .NET MAUI и создавать новые проекты на .NET MAUI уже сегодня. Прежде чем с головой окунуться в процесс перевода текущих Xamarin проектов на .NET MAUI, обновите компоненты Visual Studio, проверьте свои зависимости и изучите известные проблемы, чтобы правильно оценить время, необходимое для перехода. Помните, что Xamarin будет продолжать поддерживаться в соответствии с современной политикой жизненного цикла, которая предусматривает 2 года поддержки с момента последнего крупного релиза.