.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