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.