Xcode 14 新特性一覽
每年的 WWDC,除了發(fā)布最新的 iOS、iPadOS、watchOS、macOS 外,蘋(píng)果同樣會(huì)更新 Xcode。新版的 Xcode 帶來(lái)了很有新特性,來(lái)適配各個(gè)新系統(tǒng),同時(shí)提供更加便利的工具來(lái)提高我們的開(kāi)發(fā)效率。還有一個(gè)比較重要的是,Xcode 14 初始包大小現(xiàn)在已經(jīng)降低到 7G+,相比 Xcode 13 的 10G+,減少了 30%,當(dāng)然,安裝后還是挺大的,所以 128G 的 mac 電影還是不夠用的。
通常 Xcode Release Note 都是長(zhǎng)長(zhǎng)的一篇,除了新特性,還有各種已知的問(wèn)題、已解決的問(wèn)題等各種信息。我們這里把一些重要的更新梳理出來(lái),供開(kāi)發(fā)者們參考。
通用
Xcode 14 支持單個(gè) target 多平臺(tái),并有條件地包含特定平臺(tái)的依賴(lài)項(xiàng)、代碼、資源和構(gòu)建設(shè)置。
Xcode 14 現(xiàn)在支持為 iPadOS 開(kāi)發(fā) DriverKit 驅(qū)動(dòng)程序。
Xcode 14 包含一個(gè)新的 watchOS 應(yīng)用程序默認(rèn)模板,它將 WatchKit 應(yīng)用程序和 WatchKit 應(yīng)用程序擴(kuò)展目標(biāo)組合到一個(gè)單一的 Watch 應(yīng)用程序目標(biāo)中,從而簡(jiǎn)化了代碼、資產(chǎn)和本地化管理。目前可以將單目標(biāo) watchOS 應(yīng)用程序部署到 watchOS 7 及更高版本。
Apple Clang 編譯器
在 Xcode 中創(chuàng)建的新 C++ 項(xiàng)目默認(rèn)使用 C++20。
資產(chǎn)目錄
使用一個(gè) 1024x1024 的圖像來(lái)簡(jiǎn)化應(yīng)用程序圖標(biāo),該圖像會(huì)針對(duì)其目標(biāo)自動(dòng)調(diào)整大小。在資產(chǎn)目錄中應(yīng)用程序圖標(biāo)的屬性檢查器中選擇單一大小選項(xiàng)。不過(guò)仍然可以使用“所有尺寸”選項(xiàng)覆蓋單個(gè)尺寸。
現(xiàn)在可以將 Finder 中的復(fù)制圖像直接粘貼到資產(chǎn)目錄大綱中。
現(xiàn)在可以雙擊圖像槽以顯示打開(kāi)的文件面板并選擇替換資產(chǎn)。
可以為資產(chǎn)目錄中的自定義符號(hào)指定默認(rèn)呈現(xiàn)模式。將“渲染為”屬性設(shè)置為自動(dòng)、模板、多色或分層。然后系統(tǒng)使用符號(hào)的默認(rèn)渲染模式,除非您明確覆蓋它。
構(gòu)建系統(tǒng)
Xcode 為構(gòu)建日志提供了一個(gè)新的輔助編輯器,專(zhuān)注于并行性以幫助識(shí)別構(gòu)建性能問(wèn)題。此可視化將事件顯示為彩色塊網(wǎng)格,其中垂直軸表示并行度,水平軸表示時(shí)間。
Xcode 14 現(xiàn)在可以與它們的 Swift 目標(biāo)依賴(lài)項(xiàng)并行編譯目標(biāo)。
Swift 驅(qū)動(dòng)程序是編排 Swift 前端調(diào)用的組件,現(xiàn)在已集成到 Xcode 的構(gòu)建系統(tǒng)中,允許對(duì)其他構(gòu)建系統(tǒng)任務(wù)和顯式調(diào)度的細(xì)粒度依賴(lài)。
在 Build Phases 窗格中,現(xiàn)在可以在多選表視圖中批量編輯文件。當(dāng)編輯該表的平臺(tái)過(guò)濾器列時(shí),系統(tǒng)會(huì)將更改應(yīng)用到選擇中的所有文件。
僅 Swift 的框架和動(dòng)態(tài)庫(kù)目標(biāo)可以使用 EAGER_LINKING 構(gòu)建設(shè)置選擇新的構(gòu)建系統(tǒng)優(yōu)化。啟用此功能后,Xcode 會(huì)在 Swift 編譯期間發(fā)出額外的工件,這允許 Xcode 更早地取消阻止下游目標(biāo)的鏈接,從而增加構(gòu)建中的并行性。
調(diào)試
內(nèi)存圖調(diào)試器現(xiàn)在顯示內(nèi)存圖中的所有傳入和傳出引用。可以調(diào)整新彈出框中的可見(jiàn)節(jié)點(diǎn)集。
LLDB 現(xiàn)在在 Xcode 和命令行中顯示進(jìn)度更新以進(jìn)行長(zhǎng)時(shí)間運(yùn)行的操作。
現(xiàn)在可以使用 xcrun crashlog
調(diào)試應(yīng)用程序時(shí),線(xiàn)程性能檢查器會(huì)在問(wèn)題導(dǎo)航器和源代碼編輯器中顯示運(yùn)行時(shí)性能問(wèn)題。在應(yīng)用程序目標(biāo)的運(yùn)行方案中選中線(xiàn)程性能檢查器復(fù)選框以啟用此功能。
Xcode 現(xiàn)在在 Report navigator 中顯示一個(gè)新的啟動(dòng)日志。該日志指示 Xcode 安裝、啟動(dòng)和調(diào)試所采取的操作。
文檔
Xcode 中的 Swift-DocC 現(xiàn)在支持為 Objective-C 和 C API 構(gòu)建文檔。
Xcode 14 生成的 Swift-DocC 文檔網(wǎng)站包括一個(gè)新的導(dǎo)航側(cè)邊欄,用于瀏覽和過(guò)濾文檔。
默認(rèn)情況下,Xcode 14 生成的 Swift-DocC 文檔現(xiàn)在與大多數(shù)托管托管服務(wù)兼容,包括 GitHub Pages。
Instruments
現(xiàn)在,在時(shí)間過(guò)濾器處于活動(dòng)狀態(tài)時(shí),在時(shí)間間隔上運(yùn)行的聚合函數(shù)可以更準(zhǔn)確地計(jì)算其結(jié)果,僅基于與當(dāng)前時(shí)間過(guò)濾器相交的總間隔部分。
詳細(xì)信息過(guò)濾器現(xiàn)在允許您在查看列表視圖時(shí)將過(guò)濾器應(yīng)用于特定列。您可以通過(guò)在顯示的值上使用上下文菜單或通過(guò)輸入標(biāo)記然后選擇標(biāo)記類(lèi)型來(lái)添加這些類(lèi)型的過(guò)濾器。
Instruments 現(xiàn)在包括一個(gè)新的 Swift Concurrency 模板,用于跟蹤 Swift 并發(fā)原語(yǔ)的使用和行為。該模板包含:
一種新的 Swift Tasks 工具,可顯示隨時(shí)間變化的任務(wù)狀態(tài)、總結(jié)任務(wù)狀態(tài)、提供詳細(xì)的任務(wù)敘述、說(shuō)明結(jié)構(gòu)化并發(fā)關(guān)系并構(gòu)建任務(wù)創(chuàng)建調(diào)用堆棧的調(diào)用樹(shù)。
一種新的 Swift Actors 工具,用于跨參與者跟蹤任務(wù)行為,顯示每個(gè)參與者的任務(wù)隊(duì)列,并幫助診斷參與者隔離代碼和爭(zhēng)用的問(wèn)題。
這些工具需要 Swift 并發(fā)運(yùn)行時(shí)中的工具,該運(yùn)行時(shí)首先在 macOS 13、iOS 16、tvOS 16 和 watchOS 9 或更高版本中可用。
Instruments 有一個(gè)新的 Hang Tracing 工具,可以顯示應(yīng)用程序的主線(xiàn)程何時(shí)無(wú)法長(zhǎng)時(shí)間處理傳入事件,從而可能導(dǎo)致 UI 掛起。此外,Time Profiler 和 CPU Profiler 儀器也顯示潛在的掛起。
Instruments 中提供了一個(gè)新的 Core ML 模板。此模板包括新的 Core ML 和神經(jīng)引擎儀器以及 GPU 和時(shí)間分析器工具。使用此模板可幫助分析 Core ML 的使用情況并了解您的模型如何在設(shè)備上運(yùn)行。結(jié)合來(lái)自 Core ML、神經(jīng)引擎和 GPU 儀器的信息可以幫助跟蹤在加速硬件上執(zhí)行的操作。每個(gè)事件、模型和子模型都有匯總的時(shí)序數(shù)據(jù)。
Instruments 有一個(gè)新的 Runloop 工具,它顯示了 runloop 的使用和單獨(dú)的迭代,并在視覺(jué)上區(qū)分了進(jìn)程中所有 runloop 的 runloop 睡眠和繁忙間隔。
Interface Builder
UISplitViewController 現(xiàn)在支持使用 Mac Catalyst 構(gòu)建的 Mac 應(yīng)用程序中的側(cè)邊欄。要啟用側(cè)邊欄,請(qǐng)?jiān)诓鸱忠晥D控制器的屬性檢查器中設(shè)置主要樣式。
Interface Builder 現(xiàn)在可以異步更新 scene。
WKWebView 上會(huì)出現(xiàn)一個(gè)新復(fù)選框,以啟用標(biāo)準(zhǔn)查找和替換 UI。
現(xiàn)在可以通過(guò)控件的圖像檢查器選擇符號(hào),使用 NSButton 和 NSImageView 編輯 SF 符號(hào)的默認(rèn)配置(包括字體、比例和粗細(xì))。
支持 iOS 的 UIPasteControl 以允許通過(guò)單擊粘貼內(nèi)容而無(wú)需粘貼通知或警報(bào)。該控件可以針對(duì)任何符合 UIPasteConfigurationSupporting 的對(duì)象(例如,UIResponder)來(lái)接收粘貼的內(nèi)容。
通過(guò)符號(hào)庫(kù)選項(xiàng)卡訪(fǎng)問(wèn)和搜索 SF 符號(hào)。打開(kāi)庫(kù)(Xcode > View > Show Library)并單擊 Symbols 選項(xiàng)卡。可以將符號(hào)拖到源代碼編輯器中。
本地化
現(xiàn)在可以導(dǎo)出本地 Swift 包進(jìn)行本地化。Xcode 為項(xiàng)目或工作區(qū)中包含的所有項(xiàng)目和 Swift 包生成單個(gè)本地化目錄。還可以使用 xcodebuild -importLocalizations 和 xcodebuild -exportLocalizations 來(lái)導(dǎo)出或?qū)?Swift 包。
Organizer
Xcode Organizer 中的掛起報(bào)告提供有關(guān)應(yīng)用程序掛起的診斷報(bào)告,以幫助提高響應(yīng)能力。為單個(gè)應(yīng)用程序版本生成報(bào)告并按嚴(yán)重性排序。它們包括可用于調(diào)試的主線(xiàn)程上發(fā)生的掛起的示例日志,以及報(bào)告中受影響設(shè)備和 iOS 版本的統(tǒng)計(jì)信息。
預(yù)覽
Xcode Previews 現(xiàn)在可以在物理設(shè)備上運(yùn)行,而無(wú)需包含應(yīng)用程序,從而可以輕松地在設(shè)備上預(yù)覽框架和 Swift 包。Xcode 會(huì)自動(dòng)為您的默認(rèn)簽名身份準(zhǔn)備適當(dāng)?shù)暮灻麘?yīng)用程序來(lái)托管預(yù)覽。
Xcode Previews 現(xiàn)在可以在決定使用哪個(gè)應(yīng)用程序來(lái)托管預(yù)覽時(shí)使用該方案的可運(yùn)行文件。例如,在一個(gè)應(yīng)用程序的完整版和 beta 版都共享一個(gè)框架的項(xiàng)目中,Xcode Previews 會(huì)根據(jù)方案中的選擇自動(dòng)選擇要啟動(dòng)的應(yīng)用程序進(jìn)行預(yù)覽。
Xcode 現(xiàn)在在其自己的專(zhuān)用頁(yè)面上顯示每個(gè)預(yù)覽,其中包括允許您更改常用設(shè)置(如配色方案、方向或動(dòng)態(tài)字體大小)而無(wú)需編寫(xiě)任何代碼的新控件。
Xcode 預(yù)覽現(xiàn)在默認(rèn)是交互式的。
重構(gòu)
添加了重構(gòu)操作以添加顯式 Codable 實(shí)現(xiàn)。
簽署和分發(fā)
開(kāi)發(fā)簽名的 DriverKit 驅(qū)動(dòng)程序現(xiàn)在支持自動(dòng)簽名。分發(fā)仍需要獲得 Apple 的批準(zhǔn),并在 Apple Developer 網(wǎng)站上手動(dòng)配置附加功能。
模擬器
模擬器現(xiàn)在支持在具有 Apple silicon 或 T2 處理器的 Mac 計(jì)算機(jī)上的 macOS 13 中運(yùn)行時(shí),iOS 16 中的遠(yuǎn)程通知。模擬器支持 Apple Push Notification Service Sandbox 環(huán)境。您的服務(wù)器可以通過(guò)連接到 APNS 沙箱 (api.sandbox.push.apple.com) 向在該模擬器中運(yùn)行的應(yīng)用程序發(fā)送遠(yuǎn)程通知。每個(gè)模擬器都會(huì)生成該模擬器和運(yùn)行它的 Mac 硬件組合所特有的注冊(cè)令牌。
設(shè)備注冊(cè)令牌的長(zhǎng)度可變。模擬器中的令牌可能大于當(dāng)前的物理設(shè)備令牌。不要為這些令牌硬編碼任何特定的長(zhǎng)度或格式。
simctl 現(xiàn)在支持控制模擬位置,包括運(yùn)行場(chǎng)景和在航點(diǎn)列表之間進(jìn)行插值。
除了現(xiàn)有的運(yùn)行時(shí)捆綁格式外,模擬器現(xiàn)在還支持運(yùn)行時(shí)磁盤(pán)映像。磁盤(pán)映像被添加到受系統(tǒng)完整性保護(hù)保護(hù)的系統(tǒng)管理存儲(chǔ)位置,并安裝在系統(tǒng)管理的安裝點(diǎn)。
源代碼編輯器
現(xiàn)在,當(dāng)滾動(dòng)瀏覽文檔時(shí),Xcode 將代碼結(jié)構(gòu)的元素固定到編輯器的頂部。
Swift 文件中的錯(cuò)誤現(xiàn)在為添加缺失的導(dǎo)入提供了修復(fù)。
添加了對(duì) Swift 正則表達(dá)式的語(yǔ)法高亮和編輯支持。您現(xiàn)在可以使用 Editor > Refactoring > Convert to Regex Builder 將正則表達(dá)式文字轉(zhuǎn)換為其等效的正則表達(dá)式構(gòu)建器。在正則表達(dá)式文字內(nèi)移動(dòng)插入點(diǎn)時(shí),正則表達(dá)式的封閉子結(jié)構(gòu)會(huì)突出顯示。(82540073)
Xcode 現(xiàn)在提供了一個(gè)文件模板,用于為您的 iOS 應(yīng)用程序選擇觸控替代方案。您可以使用觸控替代方法在帶有 Apple 芯片的 Mac 上與您的應(yīng)用程序交互 - 例如,按住 Option 鍵可將觸控板用作虛擬觸摸屏。要啟用,請(qǐng)選擇 File > New File > iOS > Resource > Touch Alternatives,然后配置新添加的 com.apple.uikit.inputalternatives.plist 文件來(lái)為您的應(yīng)用選擇觸控替代品。(84271952)
Swift 中的代碼完成現(xiàn)在提供了成員初始化程序片段。
Swift 中的代碼完成現(xiàn)在提供了 if case 語(yǔ)句的片段。
StoreKit
Xcode 現(xiàn)在能夠?qū)?App Store Connect 中的應(yīng)用內(nèi)購(gòu)買(mǎi)產(chǎn)品同步到 StoreKit 配置文件中,以便在 Xcode 設(shè)置中更快地測(cè)試 StoreKit。還有一個(gè)更新的事務(wù)管理器,帶有過(guò)濾和事務(wù)檢查器。
Swift Packages
由于具有相同名稱(chēng)而發(fā)生沖突的模塊現(xiàn)在可以通過(guò)別名來(lái)消除歧義。包清單引入了一個(gè)新參數(shù)“moduleAliases”;它允許用戶(hù)為沖突的模塊定義唯一的名稱(chēng),并以新名稱(chēng)構(gòu)建它們,而無(wú)需更改任何源代碼。
現(xiàn)在可以在 Xcode 中使用 Swift Package 命令插件,方法是使用 File > Packages 菜單或 Xcode 文件導(dǎo)航器中的上下文菜單。包的依賴(lài)項(xiàng)提供的任何命令插件都可用。可以選擇將命令應(yīng)用到包的哪些目標(biāo),并且可以將自定義參數(shù)傳遞給插件。報(bào)告導(dǎo)航器顯示運(yùn)行命令的結(jié)果。如果命令指示它需要寫(xiě)入包的源文件,Xcode 會(huì)請(qǐng)求許可并讓您在運(yùn)行插件之前檢查插件的源代碼。
Xcode 現(xiàn)在為 Swift Package 插件提供了 XcodeProjectPlugin API,該 API 擴(kuò)展了 Swift Package Manager 的 PackagePlugin API。使用這個(gè) API,插件可以獲得 Xcode 項(xiàng)目結(jié)構(gòu)的簡(jiǎn)化描述。這讓在 Xcode 中運(yùn)行的適配插件可以在 Xcode 項(xiàng)目中使用這個(gè) API。您仍然可以通過(guò) Xcode 中的 Swift 包使用尚未適應(yīng)支持 Xcode 項(xiàng)目的包。
測(cè)試
XCTAssertThrows() 和相關(guān)宏現(xiàn)在在捕獲除 NSException 以外的拋出異常(包括 C++ 異常)時(shí)提供更豐富的診斷信息。
XCTest 包括一個(gè)新的 Swift-only 期望類(lèi)型 XCTKeyPathExpectation,可以使用它代替 XCTKVOExpectation 來(lái)觀察對(duì) Swift 鍵路徑的更改。
在活動(dòng)方案或測(cè)試計(jì)劃中啟用了并行化的測(cè)試目標(biāo)現(xiàn)在彼此并行執(zhí)行。以前,每個(gè)目標(biāo)都是串行執(zhí)行的,每個(gè)目標(biāo)中的測(cè)試類(lèi)是并行執(zhí)行的。現(xiàn)在,Xcode 并行執(zhí)行目標(biāo)和其中的類(lèi),更喜歡首先跨目標(biāo)扇出。對(duì)于具有大量目標(biāo)的套件,這可能會(huì)導(dǎo)致顯著加速(結(jié)果因硬件和套件組成而異)。未啟用并行化的測(cè)試目標(biāo)繼續(xù)相對(duì)于其他目標(biāo)單獨(dú)執(zhí)行。
一旦測(cè)試完成并遇到錯(cuò)誤或故障,XCTest 將捕獲系統(tǒng)診斷。此行為可通過(guò)測(cè)試計(jì)劃或 xcodebuild 命令行界面進(jìn)行控制。
-End-
最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來(lái),可以說(shuō)是程序員面試必備!所有資料都整理到網(wǎng)盤(pán)了,歡迎下載!

面試題】即可獲取