dotnet maui文档dotnet maui docs阅读笔记。

What is .NET MAUI?

使用.NET MAUI,可以在开发跨平台应用(Android,iOS,macOS以及Windows)的应用共享同一代码库。

.NET MAUI开源,可以看作是Xamarian.Forms的升级版,并从移动场景扩展到了桌面场景。和Xamarian相比,可以在同一工程中创建跨平台的应用,只须按需添加平台特定的代码和物资。.NET MAUI的关键设计目标是让应用的逻辑以及UI布局分析同一份代码。

个人感觉.NET MAUI是Xamarian Native的升级版,而不是Xamarian.Forms的升级版。后者提供一套自定义的跨平台UI控件,根原生控件有差距。

Who .NET MAUI is for

  • 以C#以及XAML的方式创建单一源代码的跨平台应用
  • 跨平台共享UI布局以及设计
  • 跨平台共享代码,测试以及业务逻辑

How .NET MAUI works

.NET提供了一套平台相关的框架,用于应用创建:

  • .NET for Android
  • .NET for iOS
  • WinRT/WinUI

这些框架都可以访问.NET6的Base Class Library。此库对平台的细节提供抽象以提供同一的访问接口。BCL依赖.NET运行库来提供执行环境。在Android,iOS以及macOS上,环境的实现由Mono提供。在Windows上则由WinUI提供。

在此之上.NET MAUI提供了一个单一的框架用于构建移动以及桌面应用的UI。

在Windows上的开发栈:

  • App Code
  • .NET MAUI
  • WinUI
  • .NET 6 BCL
  • WinRT
  • Windows

在非Windows上的开发栈

  • App Code
  • .NET MAUI
  • .NET for Android, iOS, Mac
  • .NET 6 BCL
  • Mono Runtime
  • Android, iOS, macOS

应用可以将直接调用.NET for Xxx,也可以间接通过.NET MAUI调用 Xxx。

.NET MAUI 应用可以在PC或者Mac上开发,然后编译成原生的应用包

  • Android应用从C#编译成IL,在应用加载的时候通过JIT的方式转化成原生代码
  • iOS应用通过AOT来将C#编译成原生的ARM汇编代码
  • macOS应用通过Mac Catalyst来使基于UIKit的iOS应用可以运行在桌面上,并可以按需使用AppKit以及平台的API。
  • Windows应用使用WinUI3来创建原生的应用,可对标Windows的桌面应用或者UWP应用。

What .NET MAUI provides

.NET MAUI提供跨平台的API来支持平台原生的特性,示例如下:

  • sensor访问,比如加速计,指南针,陀螺仪
  • 网络连接状态检测
  • 提供应用所运行的设备信息
  • 在应用与系统间,以及应用与应用见提供剪贴板服务
  • 从设备拣选单个或者多个文件
  • 以键值项的形式安全存储数据
  • 使用内置的文本转语音引擎来朗读文本
  • 初始化基于浏览器的验证流程,让应用可以按特定URL注册并传递回调。

.NET MAUI single project

单个工程

  • 对标多个平台和设备
  • 在单一位置管理物资
  • 支持对特定设备编写代码

更多参考https://docs.microsoft.com/en-us/dotnet/maui/fundamentals/single-project

.NET hot reload

包括XAML热重载。

其他

MAUI Roadmap

Github仓库上的路线图。

5 Advantages of .NET MAUI Over Xamarin

支持 [Spec] Slim Renderer Architecture #28

MVVM以及RxUI模式之外支持MVU,即Model-View-Update这种偏函数式模型。

What is MAUI? and what are differences between MAUI and Xamarin

.NET 6主要是将.NET Core以及Mono/Xamarian合并成base class library(BCL),更多参考https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/

Introduction to .NET MAUI Blazor | The Xamarin Show

涉及Blazor Desktop。

实验项目为Mobile Blazor Bindings。

Blazor的加载时通过0.0.0.0加载的。

引用评论区的一条评论:

We are using Blazor hosted in ElectronNET right now and this looks to be a viable alternative, but there’s a few things ElectronNET provides that, presumably, will need to be manually implemented in WPF, e.g. Automatic Updates, Toast/Notification messages, multiple windows with cross-window comms, etc. Would be great to see how some of these features should be approached using MAUI. Will also be good to escape the payload/RAM penalty of Electron!

Understanding .NET MAUI and the future of Xamarin

.NET 6 在 .NET 5之上整合了Mono的运行库,并统一了工具链。

2021-02-03 The New .NET Multi-platform App UI

https://themesof.net/可以看到.NET的路线图。

架构上,移除了视图包裹,并且不依赖于INotifyPropertyChanged,分出了:

  • Microsoft.Maui.Controls.Entry
  • CometEntry
  • FabulousEntry
  • ReactiveEntry

以上皆是实现了IEntry接口,并都与EntryHandler交互。导致框架和平台的依赖关系出现了反转。平台控件只需处理框架的需求。不再需要创建自定义渲染器或者效果了。这样处理之后,平台处理器也可以更好被其他框架使用,比如Fabulous,以及Comet和Blazor。

UI样式采用的是Fluent UI以及Matieral Design。

(持续跟进)

Xamarin.Essentials

Xamarin.Essentials provides developers with cross-platform APIs for their mobile applications.

Android, iOS, and UWP offer unique operating system and platform APIs that developers have access to all in C# leveraging Xamarin. Xamarin.Essentials provides a single cross-platform API that works with any Xamarin.Forms, Android, iOS, or UWP application that can be accessed from shared code no matter how the user interface is created.