乐趣区

关于.net:微软跨平台UI框架MAUI真的要来啦

.NET 6 preview 曾经上线,是时候为在 BUILD 2020 上发表的新.NET Multi-platform App UI(MAUI)做筹备了。对于客户端应用程序开发人员来说,这一年.NET 有很多令人兴奋的变动。让咱们回顾这些亮点,并看看明年可能会产生些什么。

.NET 6 的布局和我的项目执行是公开进行的,咱们有一个很棒的网站,它集中展示了整个.NET 的 GitHub 里程碑和用户故事。您能够拜访 themesof.net 并在 Xamarin 中搜寻以查看概览。

.NET 6 和挪动 SDK

该版本的外围是将 Xamarin SDK 对立到.NET。Xamarin 始终是.NET 的一部分,但当初它已作为外围的内容公布,与其余部件(如 Blazor)共享雷同的基类库,并采纳了现代化的 SDK 我的项目零碎格调来提供统一的工具体验。Xamarin 不再是其余相似.NET 或对.NET 有依赖性的货色,而是.NET 自身。文档和产品页面中统一的命名形式降使这一点将更加清晰。

Xamarin.Android 和 Xamarin.iOS 当初是您能够通过.NET 开发波及到的额定的平台对象,因而咱们将其称为.NET for Android 以及.NET for iOS。这些 SDK 自身是.NET 别离与 Google 和 Apple 的本地 SDK 的绑定,因而它们的 API 并没有被重新命名。

.NET Multi-platform App UI (MAUI)

Xamarin.Forms 是实用于 Android,iOS 和 UWP 的跨平台挪动优先框架,.NET MAUI 是 Xamarin.Forms 的演进。咱们领有 7 年的为客户提供技术支持的教训,服务对象从独立开发人员到一些全球性的大公司,咱们正在改善产品的外围性能,放慢 UI 渲染,投资研发统一的零碎设计模式,并从挪动端扩大到桌面端。

对于 Xamarin.Forms 的客户,您能够把 MAUI 当成您当初所理解的 Xamarin.Forms 下一个次要版本。对于刚开始应用.NET 进行多平台开发的开发人员,您能够先理解一下咱们以后为您提供哪些服务。

品质

自 2020 年年中以来,外围团队始终专一于产品中影响较大的问题,并设计了新的控制结构体系来更好地服务于将来。Xamarin.Forms 5.0 是.NET MAUI 之前的最初一个次要性能版本,之后的版本公布将仅蕴含 bug 修复。Xamarin.Forms 将继续更新直到 2022 年 11 月。

此次版本公布中并不蕴含新控件。咱们把重点放在产品质量上。咱们与您一样对新性能感到兴奋,为此,咱们非常高兴看到与 Xamarin.Forms 5.0 一起公布的 Xamarin Community Toolkit 1.0 取得了如此踊跃反馈。

当您查看咱们的 github 库 dotnet / maui 时,您会发现文件组织更加精简,与 Xamarin.Forms 相比,该组织形式利用了多指标构造并具备更加统一的命名形式。咱们心愿这样可能更不便贡献者们找到想要扭转的对象。开发流动正在 xamarin / Xamarin.Forms 库的 main-handler 分支沉闷地进行着,这些更新会被同步到 DOTNET /MAUI 中去。

性能

应用程序启动和 UI 响应工夫是应用程序性能至关重要的两个局部。为帮忙定位这里可能呈现的性能问题,咱们在 AOT,启动跟踪和疾速渲染器方面有很大的改善。.NET MAUI 除了能从.NET 6 自身取得性能晋升外,咱们还有几个能显著进步应用程序性能的改变!

.NET MAUI 中新的 handler 体系结构打消了视图嵌套,缩小了出现视图所需的 UI 控件数量。它还从根本上将平台控件与框架自身解耦。在 Xamarin.Forms 中,每个渲染器都有对跨平台元素的援用,并且通常依赖于 INotifyPropertyChanged 工作。.NET MAUI 并未应用这些渲染器,而是引入了一种称为 handler 的新模式。

当初,框架和平台之间的关系倒置了,平台控件所须要做的就是解决框架的需要。这不仅进步了效率,而且更容易扩大或重写。须要创立自定义渲染器或成果的日子曾经一去不复返了(咱们依然会确保自定义渲染器和成果是能够应用的)。

新的构造还使平台 handler 更适宜被其余框架(如 Fabulous)和翻新我的项目(如 Comet 和 Blazor)重用。咱们始终着眼于将来!

设计

针对多个平台的应用程序的设计需要和多年前相比曾经产生了很大变动。在 Xamarin.Forms 成立之初,大多数客户都心愿他们的 Android 利用看起来十分像 Android,而 iOS 利用看起来十分像 iOS。咱们曾经在 Xamarin.Forms 中引入了越来越多的款式和控件,并让这些款式和控件在各个平台上看起来都雷同,另外在 iOS 咱们还增加了 Visual control API 以及 Material Design 组件,来让您能够和在 Android 上领有一样的用户体验。这些致力是满足客户向咱们展现其需要的形式的一部分,并且在.NET MAUI 中,咱们奠定了进一步倒退的根底。

咱们将通过 Fluent UI 和 Material Design 的款式启用 full-app 的应用程序主题,在现有的控件上应用必要的款式 API 和 Visual states,并尽可能减少对控件模板的反对。

在试验方面,咱们还启动了一个新的 Visual 策略,该策略联合了 native 控件和可绘制控件。往年晚些时候,咱们将有更多信息能够分享。对于须要 1:1 跨平台设计并心愿取得更好的性能,但又须要 native 平台反对的客户, 这会很敌对的。

平台

.NET MAUI 在.NET 6 中涵括了 Android,iOS,macOS 和 Windows。除此之外,咱们也正在和 Blazor 团队一起单干,.NET 6 中囊括 Blazor 桌面开发。

Xamarin 起源于挪动开发畛域,这当然也是大多数客户应用它的中央。之后咱们退出 Xamarin.Mac 利用绑定到 Appkit 的工具来实现 Apple 桌面平台开发。.NET 6 当初将其称为.NET for macOS,然而,咱们看到 Apple 在 macOS 桌面开发方面朝着不一样的方向倒退,咱们心愿确保为您提供最佳体验。为此,咱们正在引入对 Mac Catalyst 的.NET 反对,这是苹果公司提供的解决方案,可将您应用 UIKit 构建的 iOS 应用程序带到桌面,并依据须要通过其余 AppKit 和平台 API 进行扩大。您能够浏览 Apple 的多个第一方应用程序来亲自体验。.NET MAUI 将也囊括这一办法。

一开始在 UWP 以部署到 Windows Mobile 为指标时,Xamarin.Forms 为 UWP 增加了一个以 mobile 为核心的实现。在.NET MAUI 中,咱们通过 WinUI 3 Desktop 带来了针对桌面的更弱小反对,这是咱们 Windows 团队合作伙伴构建杰出应用程序的最新实现。当波及到与.NET MAUI 相干的 UWP 和 WinUI 时,咱们被问的最多问题是在.NET MAUI 中 XAML 会是什么样的状态的。因为.NET MAUI 控件是多平台的,而不仅仅局限于 Windows 控件,并且因为咱们领有大量的 Xamarin.Forms 的客户,咱们心愿在.NET MAUI 中能够让您有统一的体验。

Single Project

咱们通过.NET MAUI 发表的最令人兴奋的事件之一就是 Single Project 体验。咱们发现,开发人员集中注意力于.NET Standard 我的项目中开发时效率最高,而不是在 Android,iOS,macOS 和 Windows 我的项目之间来回跳转的时候。

作为此体验的一部分,咱们正在对立许多治理形式,例如字体和图像治理,并缩小对治理多个平台我的项目的复杂性的依赖。对于喜爱或须要多个平台我的项目的开发人员,它仍也是任然反对的!

.NET 热重载

过来几年中,XAML Hot Reload 的引入大大节俭了.NET 开发人员的工夫。在 XAML 中进行的改变会推送到正在运行的应用程序中,从而防止了繁琐的构建和部署周期,帮忙开发人员更好地集中注意力于利用程序开发中。在.NET 6 中,咱们将其扩大到了 C#,也引入到其余的工作负载中。咱们急不可待地想要您在往年下半年体验到这一改变。

为.NET 6 和.NET MAUI 做好筹备

我心愿您对以上亮点有趣味。它们间接来源于与您这样的客户的交谈,并且咱们曾经在.NET 6 中进步了这些主题的优先级。如果您没有看到想要的更新,请通知咱们,咱们不久以后将开始布局.NET 7 及更高的版本。

为了帮忙您做好筹备工作,上面是一些一些常见问题和回复。

Q1:我应该明天应用 Xamarin.Forms,还是期待.NET MAUI?

您能够间接开始应用 Xamarin.Forms!所有就绪当前咱们会提供迁徙到.NET MAUI 的办法。

Q2:从 Xamarin.Forms 迁徙到 MAUI 要做什么?

首先,您不须要重写应用程序。第一步您须要更新我的项目和解决方案,以应用规范的 SDK。而后,更新 Xamarin.Forms 的命名空间和 NuGet 包。因为这是一个次要版本的更新,此时您我的项目中任何过期的 API 应该都曾经被更新了。仅此而已!

而后,您能够抉择是否将自定义渲染器迁徙到新的 handler 体系中,以获取所有可能的性能晋升。这能够依照您本人的步调进行。

迁徙之前,您能够先在一个新我的项目中摸索.NET MAUI。

Q3:我的自定义渲染器能够工作吗?

咱们提供使渲染器可能与新的 handler 同时工作的适配器,然而,咱们建议您更新成 handler 以获取性能晋升。另外,应用 handler 时要保护的代码也少得多。

Q4:VS Code,Comet MVU 和 Blazor Mobile Bindings 当初怎么样了?

目前它们都还是试验我的项目,咱们会持续迭代:

  • Comet MVU
  • Blazor Mobile Bindings
退出移动版