1. 程式人生 > >微軟跨平臺UI框架MAUI真的要來啦

微軟跨平臺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