微軟跨平臺(tái)UI框架MAUI來了!
轉(zhuǎn)自:MicrosoftReactor cnblogs.com/MSReactor/p/14526908.html
前言
.NET 6 preview已經(jīng)上線,是時(shí)候?yàn)樵?/span>BUILD 2020上宣布的新.NET Multi-platform App UI(MAUI)做準(zhǔn)備了。對(duì)于客戶端應(yīng)用程序開發(fā)人員來說,這一年.NET有很多令人興奮的變化。讓我們回顧這些亮點(diǎn),并看看明年可能會(huì)發(fā)生些什么。
.NET 6的規(guī)劃和項(xiàng)目執(zhí)行是公開進(jìn)行的,我們有一個(gè)很棒的網(wǎng)站,它集中展現(xiàn)了整個(gè).NET的GitHub里程碑和用戶故事。
可以訪問themesof.net并在Xamarin中搜索以查看概覽。

.NET 6和移動(dòng)SDK
該版本的核心是將Xamarin SDK統(tǒng)一到.NET。Xamarin一直是.NET的一部分,但現(xiàn)在它已作為核心的內(nèi)容發(fā)布,與其他部件(如Blazor)共享相同的基類庫,并采用了現(xiàn)代化的SDK項(xiàng)目系統(tǒng)風(fēng)格來提供一致的工具體驗(yàn)。Xamarin不再是其他類似.NET或?qū)?NET有依賴性的東西,而是.NET本身。文檔和產(chǎn)品頁面中一致的命名方式降使這一點(diǎn)將更加清晰。

Xamarin.Android和Xamarin.iOS現(xiàn)在是您可以通過.NET開發(fā)涉及到的額外的平臺(tái)對(duì)象,因此我們將其稱為.NET for Android 以及.NET for iOS。這些SDK本身是.NET分別與Google和Apple的本地SDK的綁定,因此它們的API并沒有被重新命名。
.NET Multi-platform App UI (MAUI)
Xamarin.Forms是適用于Android,iOS和UWP的跨平臺(tái)移動(dòng)優(yōu)先框架,.NET MAUI是Xamarin.Forms的演進(jìn)。我們擁有7年的為客戶提供技術(shù)支持的經(jīng)驗(yàn),服務(wù)對(duì)象從獨(dú)立開發(fā)人員到一些全球性的大公司,我們正在改善產(chǎn)品的核心功能,加快UI渲染,投資研發(fā)一致的系統(tǒng)設(shè)計(jì)模式,并從移動(dòng)端擴(kuò)展到桌面端。

對(duì)于Xamarin.Forms的客戶,您可以把MAUI當(dāng)成您現(xiàn)在所了解的Xamarin.Forms下一個(gè)主要版本。對(duì)于剛開始使用.NET進(jìn)行多平臺(tái)開發(fā)的開發(fā)人員,您可以先了解一下我們當(dāng)前為您提供哪些服務(wù)。
質(zhì)量
自2020年年中以來,核心團(tuán)隊(duì)一直專注于產(chǎn)品中影響較大的問題,并設(shè)計(jì)了新的控制結(jié)構(gòu)體系來更好地服務(wù)于未來。Xamarin.Forms 5.0是.NET MAUI之前的最后一個(gè)主要功能版本,之后的版本發(fā)布將僅包含bug修復(fù)。Xamarin.Forms將持續(xù)更新直到2022年11月。
此次版本發(fā)布中并不包含新控件。我們把重點(diǎn)放在產(chǎn)品質(zhì)量上。我們與您一樣對(duì)新功能感到興奮,為此,我們非常高興看到與Xamarin.Forms 5.0一起發(fā)布的Xamarin Community Toolkit 1.0獲得了如此積極反饋。
當(dāng)您查看我們的github庫dotnet / maui時(shí),您會(huì)發(fā)現(xiàn)文件組織更加精簡(jiǎn),與Xamarin.Forms相比,該組織方式利用了多目標(biāo)結(jié)構(gòu)并具有更加一致的命名方式。我們希望這樣能夠更方便貢獻(xiàn)者們找到想要改變的對(duì)象。開發(fā)活動(dòng)正在xamarin / Xamarin.Forms庫的main-handler分支活躍地進(jìn)行著,這些更新會(huì)被同步到DOTNET /MAUI中去。
性能
應(yīng)用程序啟動(dòng)和UI響應(yīng)時(shí)間是應(yīng)用程序性能至關(guān)重要的兩個(gè)部分。為幫助定位這里可能出現(xiàn)的性能問題,我們?cè)贏OT,啟動(dòng)跟蹤和快速渲染器方面有很大的改善。.NET MAUI除了能從.NET 6本身獲得性能提升外,我們還有幾個(gè)能顯著提高應(yīng)用程序性能的改動(dòng)!

.NET MAUI中新的handler體系結(jié)構(gòu)消除了視圖嵌套,減少了呈現(xiàn)視圖所需的UI控件數(shù)量。它還從根本上將平臺(tái)控件與框架本身解耦。在Xamarin.Forms中,每個(gè)渲染器都有對(duì)跨平臺(tái)元素的引用,并且通常依賴于INotifyPropertyChanged工作。.NET MAUI并未使用這些渲染器,而是引入了一種稱為handler的新模式。
現(xiàn)在,框架和平臺(tái)之間的關(guān)系倒置了,平臺(tái)控件所需要做的就是處理框架的需求。這不僅提高了效率,而且更容易擴(kuò)展或重寫。需要?jiǎng)?chuàng)建自定義渲染器或效果的日子已經(jīng)一去不復(fù)返了(我們?nèi)匀粫?huì)確保自定義渲染器和效果是可以使用的)。
新的結(jié)構(gòu)還使平臺(tái)handler更適合被其他框架(如Fabulous)和創(chuàng)新項(xiàng)目(如Comet和Blazor)重用。我們始終著眼于未來!
設(shè)計(jì)
針對(duì)多個(gè)平臺(tái)的應(yīng)用程序的設(shè)計(jì)需求和多年前相比已經(jīng)發(fā)生了很大變化。在Xamarin.Forms成立之初,大多數(shù)客戶都希望他們的Android應(yīng)用看起來非常像Android,而iOS應(yīng)用看起來非常像iOS。我們已經(jīng)在Xamarin.Forms中引入了越來越多的樣式和控件,并讓這些樣式和控件在各個(gè)平臺(tái)上看起來都相同,另外在iOS我們還添加了Visual control API以及Material Design組件,來讓您可以和在Android上擁有一樣的用戶體驗(yàn)。這些努力是滿足客戶向我們展示其需求的方式的一部分,并且在.NET MAUI中,我們奠定了進(jìn)一步發(fā)展的基礎(chǔ)。

我們將通過Fluent UI和Material Design的樣式啟用full-app的應(yīng)用程序主題,在現(xiàn)有的控件上使用必要的樣式API和Visual states,并盡可能增加對(duì)控件模板的支持 。
在實(shí)驗(yàn)方面,我們還啟動(dòng)了一個(gè)新的Visual策略,該策略結(jié)合了native控件和可繪制控件。今年晚些時(shí)候,我們將有更多信息可以分享。對(duì)于需要1:1跨平臺(tái)設(shè)計(jì)并希望獲得更好的性能,但又需要native平臺(tái)支持的客戶,這會(huì)很友好的。
平臺(tái)
.NET MAUI在.NET 6中涵括了Android,iOS,macOS和Windows。除此之外,我們也正在和Blazor團(tuán)隊(duì)一起合作,.NET 6中囊括Blazor 桌面開發(fā)。
Xamarin起源于移動(dòng)開發(fā)領(lǐng)域,這當(dāng)然也是大多數(shù)客戶使用它的地方。之后我們加入Xamarin.Mac利用綁定到Appkit的工具來實(shí)現(xiàn)Apple桌面平臺(tái)開發(fā)。.NET 6現(xiàn)在將其稱為.NET for macOS,但是,我們看到Apple在macOS桌面開發(fā)方面朝著不一樣的方向發(fā)展,我們希望確保為您提供最佳體驗(yàn)。為此,我們正在引入對(duì)Mac Catalyst的.NET支持,這是蘋果公司提供的解決方案,可將您使用UIKit構(gòu)建的iOS應(yīng)用程序帶到桌面,并根據(jù)需要通過其他AppKit和平臺(tái)API進(jìn)行擴(kuò)展。您可以瀏覽Apple的多個(gè)第一方應(yīng)用程序來親自體驗(yàn)。.NET MAUI將也囊括這一方法。
一開始在UWP以部署到Windows Mobile為目標(biāo)時(shí),Xamarin.Forms為UWP添加了一個(gè)以mobile為中心的實(shí)現(xiàn)。在.NET MAUI中,我們通過WinUI 3 Desktop帶來了針對(duì)桌面的更強(qiáng)大支持,這是我們Windows團(tuán)隊(duì)合作伙伴構(gòu)建出色應(yīng)用程序的最新實(shí)現(xiàn)。當(dāng)涉及到與.NET MAUI相關(guān)的UWP和WinUI時(shí),我們被問的最多問題是在.NET MAUI中XAML會(huì)是什么樣的形態(tài)的。因?yàn)?NET MAUI控件是多平臺(tái)的,而不僅僅局限于Windows控件,并且因?yàn)槲覀儞碛写罅康腦amarin.Forms的客戶,我們希望在.NET MAUI中可以讓您有一致的體驗(yàn)。
Single Project
我們通過.NET MAUI宣布的最令人興奮的事情之一就是Single Project體驗(yàn)。我們發(fā)現(xiàn),開發(fā)人員集中注意力于.NET Standard項(xiàng)目中開發(fā)時(shí)效率最高,而不是在Android,iOS,macOS和Windows項(xiàng)目之間來回跳轉(zhuǎn)的時(shí)候。
作為此體驗(yàn)的一部分,我們正在統(tǒng)一許多管理方式,例如字體和圖像管理,并減少對(duì)管理多個(gè)平臺(tái)項(xiàng)目的復(fù)雜性的依賴。對(duì)于喜歡或需要多個(gè)平臺(tái)項(xiàng)目的開發(fā)人員,它仍也是任然支持的!
.NET熱重載
過去幾年中,XAML Hot Reload的引入大大節(jié)省了.NET開發(fā)人員的時(shí)間。在XAML中進(jìn)行的改動(dòng)會(huì)推送到正在運(yùn)行的應(yīng)用程序中,從而避免了繁瑣的構(gòu)建和部署周期,幫助開發(fā)人員更好地集中注意力于應(yīng)用程序開發(fā)中。在.NET 6中,我們將其擴(kuò)展到了C#,也引入到其他的工作負(fù)載中。我們迫不及待地想要您在今年下半年體驗(yàn)到這一改動(dòng)。
為.NET 6和.NET MAUI做好準(zhǔn)備
我希望您對(duì)以上亮點(diǎn)有興趣。它們直接來源于與這樣的客戶的交談,并且我們已經(jīng)在.NET 6中提高了這些主題的優(yōu)先級(jí)。如果您沒有看到想要的更新,請(qǐng)告訴我們,我們不久以后將開始規(guī)劃.NET 7及更高的版本。
為了幫助您做好準(zhǔn)備工作,下面是一些一些常見問題和回復(fù)。
Q1:我應(yīng)該今天使用Xamarin.Forms ,還是等待.NET MAUI?
您可以直接開始使用Xamarin.Forms !一切就緒以后我們會(huì)提供遷移到.NET MAUI的方法。
Q2:從Xamarin.Forms遷移到MAUI要做什么?
首先,您不需要重寫應(yīng)用程序。第一步您需要更新項(xiàng)目和解決方案,以使用標(biāo)準(zhǔn)的SDK。然后,更新Xamarin.Forms的命名空間和NuGet包。由于這是一個(gè)主要版本的更新,此時(shí)您項(xiàng)目中任何過時(shí)的API應(yīng)該都已經(jīng)被更新了。僅此而已!
然后,您可以選擇是否將自定義渲染器遷移到新的handler體系中,以獲取所有可能的性能提升。這可以按照您自己的步調(diào)進(jìn)行。
遷移之前,您可以先在一個(gè)新項(xiàng)目中探索.NET MAUI。
Q3:我的自定義渲染器可以工作嗎?
我們提供使渲染器能夠與新的handler同時(shí)工作的適配器,但是,我們建議您更新成handler以獲取性能提升。另外,使用handler時(shí)要維護(hù)的代碼也少得多。
Q4:VS Code,Comet MVU和Blazor Mobile Bindings現(xiàn)在怎么樣了?
目前它們都還是實(shí)驗(yàn)項(xiàng)目,我們會(huì)繼續(xù)迭代:
Comet MVU Blazor Mobile Bindings
如果你也有好的開源項(xiàng)目,歡迎推薦!
微信號(hào)聯(lián)系:westbrook12000(ps:加好友請(qǐng)備注“開源”)


低調(diào)使用:全網(wǎng)音樂免費(fèi)聽,WOW!

臥槽:又來一個(gè)神器的網(wǎng)站!
