當蘋果本月在WWDC上發布macOS Catalina時,一個相關公告引起了Mac用戶和開發人員的極大興趣:一種將iPad應用轉變為完全原生Mac應用的新方法。
這一名為“Project Catalyst”的項目旨在讓開發人員將現有的iOS應用移植到Mac上。不過,這引出了一些問題:這對Mac用戶意味著什么?這會改變為Mac制作的軟件類型嗎?蘋果的生態系統是移動端優先嗎?
有開發人員擔心:Catalyst只是SwiftUI的墊腳石,在把iPad應用遷移至Mac的過程中,開發人員可能會遇到哪些挑戰?
Ars與負責在WWDC開發和推廣Project Catalyst的主要成員以及已經用這種方式制作Mac應用的少數開發人員進行了交談,向他們詢問了Catalyst的工作原理、蘋果軟件的未來發展方向以及用戶可以期待的內容等。
Mac平臺在開發人員和創意人員中很受歡迎。iPhone和iPad應用商城已經成為業界最具活力的軟件生態系統之一,但Mac應用商城卻并非如此。
蘋果試圖通過使用Catalyst將iOS應用商城的一些成功應用轉移到macOS上。本文將詳細介紹開發人員是如何逐步使用蘋果所構建的內容,以及他們面臨的挑戰;將分享蘋果對我們所提出問題的答案,例如隨著移動衍生應用涌入該平臺,蘋果計劃如何保持Mac應用的高標準質量;從整個生態系統來看,蘋果跨平臺應用的長期計劃又是什么。
Project Catalyst
據彭博社2017年12月報道,蘋果正在開展一個項目,該項目將使得為macOS和iOS并行開發應用變得更加容易。我們今年在WWDC上了解到,推動該項目的一個主要組成部分叫做Project Catalyst,它可以相對快速地將iPad上的應用移植到Mac上。
應用開發人員現在可以開始使用集成開發工具Xcode的測試版本。為了在WWDC舞臺上大肆宣傳,蘋果聲稱開發人員只需要在Xcode中打開他們的iPad應用項目,然后單擊一個復選框就可以構建一個Mac應用。當然,它并不總是這樣簡單,但應該比你想象的要容易。
具體運作方式
開發人員用于為iPad和Mac創建應用的許多框架都是相似的。蘋果在這方面所做的工作就是彌合iPad和Mac版本共享開發框架之間存在的差異。但最大的差距是UI框架之間的差距。
開發人員使用UIKit框架構建iPad應用的用戶界面和功能。與此同時,Mac有一個名為AppKit的框架,可以執行許多與UIKit相同的操作。以前,Mac應用無法運行使用UIKit制作的應用,iOS設備無法運行使用AppKit制作的應用。即使開發人員在構建Mac版本時可以重復使用iPad應用的某些部分,也需耗費額外的大量工作。
有些框架可以在一個平臺上使用,但不能在另一個平臺上使用。例如,在Mac上無法使用ARKit,那些想用ARKit來提供增強現實體驗的開發人員需要考慮這一點。在某些情況下,ARKit會自動過濾與目標設備上不存在的功能和框架有關的代碼。
某些情況下,開發人員當然可以在其代碼中使用條件邏輯,根據運行軟件的設備提供不同的體驗和功能。但是,蘋果希望保留這種方法,用于應對某種不同設備對不同功能的需求。
“我們希望他們盡可能少地使用條件,因為條件是不同的代碼路徑,”Catalyst負責人Ozer解釋道?!岸椅艺J為與條件相關的是API和功能,它們實際上只是Mac版本?!?/p>
蘋果表示,許多開發人員構建的第一個第三方Catalyst應用,能在24小時內在Mac上運行可接受的構建版本。但每個應用都面臨著一些獨特的挑戰。
開發人員的經驗
少數蘋果開發人員已經在使用Catalyst構建第一個第三方應用,他們在WWDC上展示自己的應用。為了獲取更多信息,Ars與開發人員討論了三個不同的應用,即開發人員如何成功地將iPad版本的Twitter、TripIt和Asphalt 9:Legends帶到了Mac上。
Twitter在2016年停止了對其Mac應用的支持。雖然一些第三方Twitter應用仍可用于macOS,但該公司繼續將Web視為Mac用戶使用社交媒體平臺的主要方式。
今年在WWDC上詳細介紹Catalyst時,蘋果透露Twitter將重返Mac。蘋果邀請Twitter的開發人員通過Catalyst構建原生Mac Twitter應用,而且Twitter支持Mac升級到與iPhone、iPad和iPod相同的水平。
Asphalt 9:Legends
你可能認為移植像Asphalt 9:Legends這樣圖形密集型3D游戲會遇到額外的障礙。但這并不完全是Gameloft Barcelona圖形工程師Alex Urbano和引擎軟件工程師Manu Ruiz所描述的那樣。
“這個過程非常簡單,在新的Xcode上打開當前的iOS項目,標記新的macOS目標選項,并進行編譯即可,”Ruiz說?!帮@然,它在第一次嘗試時不起作用,因為我們的一些庫在非移動設備上不受支持,例如運動控制;而且一些第三方庫沒有為macOS和x86-64平臺做好準備。在重構了一些代碼之后,我們設法在大約24小時內編譯并運行了整個Asphalt代碼庫?!?/p>
關于圖像方面的調整,Urbano說道:“這很簡單。我們必須調整一些著色器的精度,使它們在高端Mac中以更高的分辨率正常工作,以便進一步提高性能。我們稍微改變了Metal緩沖管理的工作方式,這允許我們實現一些在其他平臺中不存在的效果,同時保留60fps目標的原始分辨率?!?/p>
TripIt
iOS開發人員Rich Shimano向Ars發送了一封電子郵件,其中列出了將旅行計劃應用TripIt從iPad遷移到Mac的每個詳細步驟:
在Xcode中構建當前的iPad應用,只需要幾次迭代即可識別并刪除不支持資源上的各種依賴項,例如特定電話呼叫的框架或尚未構建以支持MacOS的第三方iOS SDK。
遍歷所有用戶流和數據同步方案,并關閉不支持或不可用的功能。
在Mac的多窗口點擊環境中定制UI以提高用戶效率。
至于在過程中會遇到哪些挑戰,Shimano表示,最重要的是“舊的代碼庫依賴于已棄用的蘋果框架和API以及舊版本的Swift,可能需要對現在的API進行重大改寫”。此外,“不具有多任務友好性和靈活布局的iPad應用可能需要進行大量重寫,更多地依賴于自動布局,以便在桌面窗口上進行適當渲染,即使在單個用戶會話中,這些窗口的大小和寬高比也會有很大差異。”
蘋果保證Mac應用質量達到桌面級
蘋果及其合作伙伴開發人員表示,Catalyst能將iPad上的應用輕松導入macOS,但用戶對Mac上未來應用質量的擔憂仍然存在。
Project Catalyst是建立在macOS 10.14 Mojave之上,這是該公司去年推出的macOS年度重大升級。該公司推出的新聞、股票、語音備忘錄和家庭應用也是建立在這一系統之上。
Mac高級用戶擔心,將iPad應用遷移至Mac的簡單途徑將使開發人員無法提供過去用戶在Mac上享受的功能,以及功能強大且全面的桌面應用。一部分原因是因為移動應用往往側重于較窄的任務,并且它們通常不具有與良好的桌面應用一樣強大的功能集。另一部分原因在于,如果他們使用AppKit從頭開始構建原生Mac應用,UIKit和Catalyst都不會為Mac開發人員提供他們可以訪問的全部功能和框架。
當然,我們采訪過的蘋果團隊成員并沒有此類擔憂。Ozer表示,首先,UIKit確實為開發人員提供了訪問AppKit的權限?!爱斈銓IKit應用帶到Mac上時,我們會大量使用AppKit,例如,當你使用工具欄、觸控條或菜單時,這些都是AppKit,”他說?!耙虼碎_發人員不必直接使用AppKit,但他們可在其UIKit應用中使用AppKit?!?/p>
當然,蘋果認同AppKit是提供高端Mac應用的方式。蘋果開發人員關系高級總監Pruden說,她認為Catalyst是為開發者提供了選擇,但那些創建強大桌面應用的團隊將知道它是否適合自己的產品。
專用應用與廣泛應用
Benjamin認為有多種類型的應用,并且它們在平臺上并不相互排斥。這是了解蘋果新方法的關鍵。他說:“我認為Mac上一直是些龐大而復雜且功能強大的應用,它們的范圍十分廣泛。我認為iOS上的應用設計精良,本質上更有針對性。現在人們知道這些東西是什么,他們也希望在電腦桌面上擁有這些簡單易用的體驗。雖然網頁可以做到這一點,但應用帶給用戶的體驗感更有優勢?,F在你習慣于在手機和iPad上使用相對較新的體驗,那為什么不能將相同的體驗遷移到Mac上呢?”
為什么在有Web應用時仍要制作原生Mac應用?
雖然蘋果和微軟正在花費相當大的努力來吸引開發人員為他們的桌面操作系統制作原生應用,但谷歌正在根據不同的財務激勵來采取不同的策略。
谷歌新興的Chromebook本質上是21世紀的虛擬終端,從頭開始設計用于Web瀏覽體驗和使用基于Web的應用。但Mac有著悠久的專注于原生應用的傳統。蘋果的開發人員為什么要通過從iPad移植軟件而不是讓Mac用戶在Safari或Chrome中訪問他們的Web應用呢?
Benjamin認為這與性能有關。“應用作為原生應用,與用戶在Web上體驗的性能截然不同,”他說。此外,“還有另一個好處,這樣做能讓用戶在不同設備上獲得相同的體驗?!?/p>
macOS和iOS:先有雞還是先有蛋
鑒于iOS和iPadOS似乎是這種新模式的核心,我們詢問蘋果是否認為iOS(和iPadOS)是其生態系統的主要開發平臺。蘋果是否希望開發人員首先支持移動設備?
Pruden回答說,不同的設備和操作系統適用于不同的用例,對于開發人員來說,沒有哪一個平臺比其他平臺更重要。
“從數量上來看,顯然iPhone應用是最多的,”Pruden繼續說道?!暗也徽J為我們會把數量作為投放精力的主要考慮因素,它也不會影響我們決定下一步支持開發人員的方式?!?/p>
然后是SwiftUI。雖然Catalyst旨在幫助開發人員將已有的iPad應用帶到Mac上,但蘋果建議將SwiftUI視為開始新的跨平臺項目的起點。在這種情況下,首先要開發iOS或iPadOS,然后再開發macOS,就像開發所有原生蘋果平臺一樣。
了解SwiftUI
對于WWDC的開發人員而言,Catalyst并不是其唯一的重要公告,此外還包括SwiftUI。SwiftUI是一個框架,旨在使用Xcode和蘋果的Swift編程語言“在每個平臺上聲明應用的用戶界面和行為”。
我們從蘋果開發者處了解到,SwiftUI提供視圖、控件和布局結構,用于聲明應用的用戶界面。該框架提供事件處理程序,為你的應用提供點擊、手勢和其他類型的輸入,以及管理從應用模型到用戶將看到的交互視圖和控件的數據流。
你可以將SwiftUI視圖與來自UIKit、AppKit和WatchKit框架的對象集成,以進一步使用該平臺特定的功能。
雖然很難量化Swift的采用速度,但工程師和macOS及iOS開發人員Andrew Madsen最近提出了一種可行的方法,來估計Swift在蘋果應用商城中廣泛運用的程度。
Madsen發現42%的應用使用了Swift,但是當他撇去游戲應用時,這一比例上升到了57%。實際上,列表中沒有一個游戲使用Swift,因為它們大多數是用Unity等跨平臺工具編寫的。
“一開始,只有少數應用使用Swift;但三年后,有約一半的應用在使用Swift,這也表明了蘋果在引入新語言方面做的很不錯,”他總結說道。這對SwiftUI來說是個好兆頭。
至于開發人員方面,Shimano表示,TripIt在使用SwiftUI時已有一些重要的促進因素,獨立于Mac應用。也就是說,它允許TripIt團隊與watchOS應用共享公共代碼以改進功能校驗,并將簡化和減少顯示快速變化的旅行數據所需的代碼量,例如航班延誤和更改登機口。
“但是,我們正在嘗試特定的桌面視圖,這些視圖有可能找到支持iPad甚至iPhone的方式,”他補充道。“通過在單個代碼庫中編寫SwiftUI,我們應該能夠通過Catalyst快速輕松地為我們的iPad和iPhone應用帶來增強功能?!?/p>
Twitter的O'Brien說:“現在,我們專注于將非常龐大的代碼庫與許多傳統的UIKit接口一起移植到Mac上。目前,Project Catalyst對我們來說是一個很好的解決方案。”Twitter團隊對SwiftUI帶來的可能性感到非常興奮,并且該公司愿意在未來采用SwiftUI來獲取新功能。
制作Mac應用的三種方法
總結一下,現在有三種不同的方法可以使用蘋果自己的工具和框架開發原生Mac應用:
使用UIKit構建iOS或iPadOS應用,然后使用Project Catalyst將其轉換為macOS應用。根據蘋果的說法,這是針對那些迄今為止在移動設備上更常見而不是在桌面設備上使用的專用應用。
使用AppKit及相關框架和API為macOS構建應用,充分利用平臺的全部功能。蘋果表示,這適用于傳統的重型Mac專用應用。
使用SwiftUI從頭開始為多個蘋果平臺構建應用,SwiftUI可與其他現有框架配合使用。這是蘋果期望開發人員在未來為多平臺應用所做的事情。
一些Mac用戶認為蘋果的關注點在iOS上,從而將Mac降級為替補角色。但是對于iOS、iPadOS、watchOS和tvOS而言,Mac必須取得成功。Catalyst致力于支持Mac,同時保持與公司移動平臺的緊密聯系。從長遠來看,這將如何發揮作用還有待觀察。大家需要為蘋果、開發者和用戶所希望看到的最佳結果做準備。
如果你看了蘋果產品的營銷,你可以清晰地了解到各類產品的目標客戶。如今,大多數Mac主要銷售給創意人士和專業人士,從作家到平面設計師,從視頻編輯到開發人員再到3D動畫師。那么將Mac視為創作者的平臺,將iOS視為消費者的平臺,從定義來看,后者的平臺更廣。但是,如果用Xcode為Mac開發的應用不能得到關鍵目標客戶的青睞,那么從長遠來看,移動平臺也無法生存下去。
所以蘋果面臨的第一個問題是:先有雞還是先有蛋?Mac還是移動端?要么兩個都要,要么兩個都不要,二者是共生關系。
但是如果一些iOS軟件來到Mac上,會不會出現用戶對兩者都不買帳的情況呢?添加了鈴聲就是一個很好的桌面應用嗎?這些情況是否會發生不僅取決于開發人員,還取決于蘋果如何聽取和回應開發人員在建立Catalyst和SwiftUI過程中提出的反饋。
蘋果首席執行官蒂姆·庫克此前向用戶和開發人員保證,蘋果致力于將Mac、iOS和iPadOS打造為真正獨特的平臺?,F在,蘋果依然如此。但是,該公司的用戶和開發者社區正在進入未知的領域,較之前,這些平臺很快會緊密聯系在一起。這樣做的有益程度到底如何,還將拭目以待!