Xcode 12.5 新特性一覽

隨著 iOS 14.5 RC 版的發(fā)布,Xcode 12.5 RC 版也發(fā)布了。Xcode 12.5 beta 版本沒有跟著 iOS 14.5 beta 版本的節(jié)奏,而是在 beta 3 后就沒再發(fā)布新的 beta 版本,而 iOS 14.5 則一直發(fā)布到 beta 8。RC 版發(fā)布,正式版也不會太遠,讓我們一起來看看 Xcode 12.5 版本的新特性。另外已修復(fù)了一些現(xiàn)有的問題,可以查看 Releast Note 查看具體內(nèi)容。
通用
可以使用新的 File Provider Extension 目標(biāo)模板來創(chuàng)建 macOS File Provider 程序擴展。
Product 菜單中的 Reveal Build Products Folder 項將打開 Finder,并選擇 Xcode 用來構(gòu)建產(chǎn)品的文件夾。
Apple Clang Compiler
libc++ 不再支持
_LIBCPP_RAW_ITERATORS宏。可使用封裝的迭代器。Clang 現(xiàn)在從
-init方法的可用性注釋中推斷+new的可用性。由于+new會調(diào)用[[Foo alloc] init],因此除非+init可用,否則+new不可用。
構(gòu)建系統(tǒng)
在構(gòu)建應(yīng)用托管的測試 target 時,構(gòu)建系統(tǒng)不再為托管應(yīng)用 target 重新簽名;相反,它會在應(yīng)用 target 的簽名任務(wù)運行之前構(gòu)建測試 target。這消除了額外的代碼簽名任務(wù),從而加快了具有此類測試 target 的大型應(yīng)用程序的構(gòu)建。
xcodebuild 現(xiàn)在在創(chuàng)建 XCFramework 時支持
-archive標(biāo)志,提供了一種從一個或多個歸檔文件創(chuàng)建 XCFramework 的簡便方法。
例如
xcodebuild -archive <archive_path1> -framework MyFramework.framework -archive <archive_path2> -framework MyFramework.framework -o <output_xcframework_path>
Code Completion
在包含錯誤的表達式中以及在沒有附加上下文的情況下含糊不清的表達式中,代碼完成更為可靠。
例如,以下代碼:
func test(a: Int, b: String) -> Int { ... }
func test(a: Int, b: Int) -> String { ... }
func test(a: (Int, Int) -> Int) -> Int { ... }
test().prefix(3). 之后會給出 String 成員提示。而 test(a: 2). 會給出 Int 和 String 的成員。以下代碼中的 $0 會給出 Int 成員:
test {
$0.
}
調(diào)試
現(xiàn)在,當(dāng)使用 libc++ 調(diào)試 C++ 程序時,LLDB 為 STL 容器和算法提供了改進的表達式評估支持。
可以調(diào)用 STL 容器的成員函數(shù),即使從未在目標(biāo)程序中調(diào)用它們。
LLDB 可以從標(biāo)準(zhǔn)庫中實例化模板化函數(shù)。這包括
std::sort,std::count,std::count_if等算法。
Instruments
os-signpost-interval模式中的<(start | end)-pattern>元素現(xiàn)在是可選的。這使Custom Instruments可以通過名稱和其他屬性來匹配路標(biāo),而無需指定期望的消息格式。現(xiàn)在,使用 Instruments 對 XCTest 進行性能分析將自動開始記錄,而無需單擊“記錄”按鈕。
Instruments 現(xiàn)在可以從包含日志記錄級別數(shù)據(jù)的 ktrace 文件中導(dǎo)入 os_log 和 os_signpost 數(shù)據(jù)。
Custom Instruments 可以指定靜態(tài)定義的子軌道,而無需由表列數(shù)據(jù)驅(qū)動。
xctrace export 會按時間順序生成輸出。
針對 xctrace 的目錄查詢公開了有關(guān)運行的元數(shù)據(jù)信息。
Interface Builder
可以在檢查器中為 NSObjectController 和類似對象配置用于自定義類的模塊。
本地化
可以使用 Xcode 將應(yīng)用程序本地化為所有 ISO 639 語言。
現(xiàn)在,您可以使用工作空間導(dǎo)出用于本地化的項目集合,從而為工作空間中的所有項目生成單個本地化目錄。作為此更改的一部分,導(dǎo)入和導(dǎo)出以進行本地化的選項現(xiàn)在位于 Product 菜單中,而不是在 Editor 菜單中。還可以將
xcodebuild -importLocalizations和xcodebuild -exportLocalizations與-workspace選項一起使用來導(dǎo)出或?qū)牍ぷ鲄^(qū)。通過新的支持本地化導(dǎo)出的構(gòu)建設(shè)置,您可以為不需要本地化的特定目標(biāo)或項目禁用本地化導(dǎo)出。
Playgrounds
應(yīng)用程序項目中的 Playground 現(xiàn)在可以訪問應(yīng)用程序目標(biāo)中的符號。創(chuàng)建的新 Playground 默認(rèn)情況下啟用此選項。要在現(xiàn)有的 Playground 文檔中啟用此功能,請在 File Inspector 中打開 Import App Types 選項。
深度嵌套的 Swift 數(shù)組和結(jié)構(gòu)的內(nèi)聯(lián)結(jié)果現(xiàn)在在 Xcode Playgrounds 中顯示更多信息。
模擬器
模擬器現(xiàn)在支持從應(yīng)用程序內(nèi)錄制視頻。單擊工具欄上的屏幕快照按鈕時,按住 Hold Option(或按Command + R)以錄制視頻。單擊紅色按鈕停止錄像。
模擬器可以使用新的“錄制視頻”功能從錄制的視頻中創(chuàng)建動畫GIF。錄制視頻后,右鍵單擊視頻預(yù)覽,然后選擇另存為動畫GIF。要同時保留視頻文件和GIF動畫,請按住 Option 鍵,然后選擇 Save Copy as Animated GIF。您可以在 Simulator Preferences 中調(diào)整生成的GIF的尺寸和大小。
StoreKit
Xcode 中的 StoreKit Testing 現(xiàn)在支持測試非續(xù)訂訂閱。
現(xiàn)在,可以在 watchOS 上使用 StoreKit Test 框架。
Swift Packages
現(xiàn)在,指定 5.4 工具版本的 Swift 軟件包可以顯式地將目標(biāo)聲明為可執(zhí)行文件,從而允許在軟件包代碼中使用 @main 關(guān)鍵字。
Swift Package Manager 現(xiàn)在可以自動將軟件包產(chǎn)品和目標(biāo)構(gòu)建為動態(tài)框架,如果這樣做可以避免在運行時復(fù)制庫代碼。
Swift Package Manager 基于每個用戶緩存軟件包依賴關(guān)系,這減少了網(wǎng)絡(luò)流量,并提高了對于后續(xù)使用同一軟件包的依賴關(guān)系解析的性能。如果需要,可以通過使用新的
-disablePackageRepositoryCache標(biāo)志來禁用xcodebuild中的緩存使用。
測試
XCTest 現(xiàn)在支持將測試失敗標(biāo)記為“預(yù)期”。預(yù)期的測試失敗不會影響包含測試的套件的總體通過/失敗結(jié)果。Xcode 在“測試導(dǎo)航器”和“測試報告”中以不同的方式顯示預(yù)期的故障,并突出顯示發(fā)生預(yù)期故障的代碼行以及可選的用戶描述。預(yù)期的測試失敗提供了一種低開銷的工具,用于在無法立即解決的失敗時保留項目測試套件的整體“綠色”狀態(tài),從而確保可以清楚地看到任何新的失敗。與跳過使用XCTSkip進行的測試相反,具有預(yù)期失敗的測試仍會運行,并報告所有意外更改。(13408632)
要按預(yù)期方式標(biāo)記故障,可在產(chǎn)生測試失敗的代碼之前在測試中調(diào)用新的 XCTExpectFailure API ,例如:
XCTExpectFailure("…")
// Perform test which currently fails
此外,可以通過將失敗的代碼包含在閉包中來限制預(yù)期失敗的范圍:
// Arrange and act on the test subject
XCTExpectFailure("…") {
XCTAssert(…) // Failing assertion
}
// Continue test with further assertions etc.
默認(rèn)情況下,如果調(diào)用 XCTExpectFailure 但測試未記錄失敗,則 XCTest 會將測試標(biāo)記為由于“無法匹配的預(yù)期失敗”而失敗。通過傳遞 XCTExpectFailure XCTExpectedFailure.Options 對象作為參數(shù),并將其 isStrict 屬性設(shè)置為false,可以抑制不確定發(fā)生的故障:
let options = XCTExpectedFailure.Options()
options.isStrict = false
XCTExpectFailure("…", options: options)
// Perform test which sometimes fails
現(xiàn)在,Xcode允許您清除測試結(jié)果,而不必通過從 Xcode 的 Product 菜單中選擇 Clean Test Results 來重新打開工作區(qū)。
Xcode 現(xiàn)在支持針對 watchOS 應(yīng)用程序的 XCTest 單元和 UI 測試。創(chuàng)建新的 watchOS 應(yīng)用程序時,請選中 Include tests 復(fù)選框,以將單元和UI測試目標(biāo)添加到新創(chuàng)建的項目中。對于現(xiàn)有項目,請通過“文件”>“新建”>“目標(biāo)”添加單元或UI測試目標(biāo),然后將測試目標(biāo)添加到 WatchKit App 方案的 Test 操作中。要運行測試,請從工具欄的“運行目標(biāo)”菜單中選擇手表模擬器或設(shè)備,然后選擇 Product > Test。請注意,watchOS 7.4 或更高版本支持測試。
現(xiàn)在,當(dāng)在 macOS 11.3,iOS 14.5,tvOS 14.5,watchOS 7.4 或更高版本的OS上運行測試時,XCTest 現(xiàn)在自動包括 Swift 通用測試類的專用子類。這使您可以使用泛型來提高測試類的可重用性。
XCTest 現(xiàn)在包括
XCTAssertIdentical(_:_:_:file:line:) and XCTAssertNotIdentical(_:_:_:file:line:)API來斷言兩個對象實例是否相同(同一實例)并且比 XCTAssertEqual 更嚴(yán)格在 Swift 中使用===運算符而不是==。現(xiàn)在,代碼覆蓋率報告顯示每個文件的可執(zhí)行行數(shù)。
