原文連接python
更多好文,請關注公衆號 知識小集 (ID: zsxjtip)c++
Xcode 11 正式版比預期晚來了一點,不過不要緊,Release Note 文檔比 beta 版的文檔改動不大。咱們翻譯(部分)整理了一下,發出來供你們參考。內容不少,有些地方翻譯也不到位,因此建議收藏並對照英文慢慢看。shell
若是內容上有問題,能夠在留言區留言指出,這樣你們均可以看到問題,在此感謝。編程
• Xcode 11 支持使用 SwiftUI 進行開發json
注意canvas
僅在 macOS Catalina 10.15 上運行 Xcode 時,SwiftUI 預覽和檢查器纔可用。swift
• Xcode 11 增長了對 Mac Catalyst 的支持,Mac Catalyst 可將 iPad 應用程序帶入 Mac。xcode
注意緩存
僅在 macOS Catalina 10.15 上運行 Xcode 時,iPad 應用程序才能配置成爲 Mac 構建,而且在早期版本的 macOS 上沒法運行 My Mac。安全
• 如今能夠獨立於系統外觀設置更改 Xcode 的外觀。
• Xcode 支持從 Organizer 窗口或在命令行中使用 xcodebuild 或 xcrun altool 上傳應用程序。Xcode 再也不包含 Application Loader。
• macOS 上的 LaunchServices 在啓動 Xcode 中嵌入的Instruments、Simulator 等工具時會聽從所選的 Xcode。例如,雙擊 Finder 中的 Instruments 時,將啓動所選 Xcode 對應的 Instruments 版本。
• Clang 如今提供了一種控制退出時析構函數註冊的機制。您可使用標誌 -fno-c++-static-destructors
全局禁用它們,或者應用屬性 [[clang::no_destroy]]
來禁用特定變量的析構函數。當使用 -fno-c++-static-destructors
時,還添加了屬性 [[clang::always_destroy]]
以啓用特定變量的析構函數。
• 做爲擴展,如今全部語言模式都支持具備固定基礎類型的 C++ 11
枚舉。
• 默認狀況下,在全部平臺上都啓用堆棧檢查以防止內存問題。
• 機器代碼的 outline 默認是 -Oz
。它經過識別跨函數的相同代碼序列來減小代碼大小。這些序列在單個編譯器生成的函數中被封裝(「outlined」)。每一個原始代碼序列都被替換爲調用該 outlined 函數。
• 爲了提升性能和安全性,靜態連接器(ld)如今將標記爲常量的全局變量移動到新段中:__DATA_CONST
。這些全局變量可能包含編譯器生成的指針,動態連接器(dyld)在加載期間須要修復這些指針,可是在其餘狀況下是常量的,例如 vtable 和顯式聲明的常量指針。一旦 dyld 完成加載 image,它就會設置 __DATA_CONST
爲只讀。此更改不會影響性能良好的代碼,但可能會破壞依賴於未定義行爲的代碼,例如使用一個類型來寫入聲明爲 const 的指針。
static int value1 = 0; //存儲在__DATA中
static int value2 = 0; //存儲在__DATA中
const int * const valuePtr =&value1; //存儲在__DATA_CONST中
// ERROR: Attempting to store a value to a constant pointer
(int *)valuePtr =&value2;
複製代碼
• Clang 如今支持適用於 iOS 13,macOS 10.15,watchOS 6 和 tvOS 13 的 C++17 <filesystem>
庫。
解決的問題
• 移除了 <experimental/optional>
和 <experimental/variant>
。請改用 C++17 中的 <optional>
和 <variant>
。
• Xcode 可使用 「Find」 導航器在工做區/項目中查找 assets。Asset Catalog Editor 還支持查找和替換,您可使用 Replace 重命名 assets。
• 如今可使用菜單或鍵盤快捷鍵剪切,複製,粘貼和複製 assets。
已解決的問題
• 修復了在 iOS 11 上在運行時沒法找到 named colors 的 Asset Catalog 錯誤。
• Xcode 默認使用響應文件將輸入文件傳遞給 Swift 編譯器。要關閉此行爲,請將 USE_SWIFT_RESPONSE_FILE 設置爲 NO。
• 運行腳本階段和自定義構建規則能夠在一些編譯器和構建工具使用的 Makefile-style 的 .d
格式輸出中聲明和發出依賴項文件。在肯定是否應執行規則或階段時,構建系統會在後續構建期間檢查列出的更改文件。
• 如今,項目能夠經過將「Process Header Files」(APPLY_RULES_IN_COPY_HEADERS)構建設置設置爲 YES 來使用自定義構建規則。
• 自定義構建規則如今能夠指定在執行期間使用的其餘靜態輸入文件。使用 SCRIPT_INPUT_FILE_#
環境變量將這些已解析的輸入文件路徑提供給規則腳本。
• 若是條目不適合正在構建的平臺,Xcode 會在構建時從應用的 Info.plist 文件中刪除一些條目,這對於配置爲多個平臺構建的目標很是有用。經過將構建設置 DISABLE_INFOPLIST_PLATFORM_PROCESSING
設置爲 YES 能夠禁用此行爲,在這種狀況下,target 必須承擔相應管理這些條目的責任。
• 自定義構建規則如今能夠聲明它們應該在每一個 architecture 中運行一次(默認),或者在全部 architecture 中只運行一次。這對於體系結構中立的自定義規則頗有用,例如,生成每一個體繫結構不一樣的文件的代碼生成工具。
• XCFramework 能夠將多個平臺(包括iOS設備,iOS模擬器和Mac Catalyst)的二進制框架或庫捆綁到一個可分發的 .xcframework
包中,開發人員能夠在本身的應用程序中使用它。能夠將 .xcframework 包添加到 Xcode 目標的連接庫階段,Xcode 在構建時使用所包含的框架或庫的正確平臺版本。使用 xcodebuild -create-xcframework
從命令行建立框架。應該在 Build Libraries for Distribution
構建設置爲 YES 的狀況下構建 XCFramework 中捆綁的框架或庫。
已解決的問題
• 默認狀況下,Xcode 的新構建系統不會檢測聲明爲 shell 腳本構建階段輸入的目錄中的更改。啓用構建設置 USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES
會使其執行此操做。可是,若是此類目錄中的任何文件是由依賴於腳本階段輸出的任務生成的,則會產生依賴循環錯誤,必須經過重構目標來解決。
棄用
• Xcode 的內置的 usdz_converter
工具已棄用,將被刪除。使用位於 Augmented Reality 中的資源下的新的工具套件。
• Subversion 的命令行支持將在之後的版本中刪除。
• 如今有一個複選框,能夠區分字符串屬性的默認值是 nil 仍是空字符串。設置時,若是未指定其餘默認值,則默認值爲空字符串。
• Xcode 11 數據模型文件格式再也不寫出或保留實體或屬性的棄用的 Sync Services 信息。
• 在使用 Xcode 11 數據模型文件格式和適當的部署目標時,Core Data 數據模型編輯器添加了對派生屬性的支持。
• 使用 Core Data 建立應用程序時,還有一個新的複選框,能夠爲數據模型的默認配置啓用 CloudKit 支持。也可使用新配置檢查器爲現有數據模型啓用此功能。當數據模型配置支持 CloudKit 時,數據模型編輯器會執行其餘驗證,以確保模型符合 Core Data CloudKit 支持的要求。
已解決的問題
• 使用 UUID 屬性類型、URI 屬性類型或持久歷史記錄功能在與 Xcode 9 中使用的格式的數據模型文件格式一塊兒使用時生成錯誤。
• 您如今可使用 Sound Classification 預覽直接從麥克風對聲音進行分類。
• 如今提供 Tabular Regressor 模板,加入了 Image Classification, Sound Classification, Activity Classification, Tabular Classification, Word Tagger 和 Text Classification。
已解決的問題
• 非 ASCII 字符可用做 Image Classification 和 Sound Classification 的訓練標籤。
• 視圖調試器如今在檢查器中顯示 NSImage 實例的名稱。
• 用於調試視圖層次結構的 Size inspector 中的圖形過濾器會標識所選視圖上的哪些屬性受到約束。在過濾器中選擇屬性會將顯示的約束縮小爲與該屬性匹配的約束。可使用 Shift 和 Command 等標準鍵來擴展選擇,顯示與這些屬性匹配的約束的並集。
• 如今能夠調試 watchOS 應用程序的視圖層次結構。
• 如今能夠從 Devices and Simulators
窗口模擬鏈接設備的網絡情況和 thermal 狀態。
• 視圖調試器在調試導航器和畫布中顯示 UIWindowScene 實例。
• 能夠在 scheme 選項中禁用視圖調試。
• 用於調試視圖層次結構的 Size inspector 包含有關約束的更多詳細信息,包括過濾器,編輯器中的懸停突出顯示以及更好的描述。
• 視圖調試器支持調試 Mac Catalyst 應用程序。
• 視圖調試器檢查器顯示 NSImageView 和 NSButton 的contentTintColor。
• 視圖調試器如今顯示 iOS 命名顏色和系統顏色的名稱。
• 視圖調試器顯示特徵集合信息。
• 視圖調試器顯示 UIImage 實例的名稱。
• 視圖調試器如今顯示符號信息,如基線和中線。
• 調試欄外觀切換器支持在iOS上更改暗和亮模式。
• Scheme Editor 的 Diagnostics 選項卡中的 Pause on issues 複選框將替換爲常規斷點。您可使用斷點導航器建立 Runtime Issue Breakpoint。
• 使用可從調試欄訪問的 Environment Overrides 覆蓋調試進程的外觀,動態類型和可訪問性選項等系統設置。
• 調試器支持使用崩潰日誌(.crash文件)。
• 調試器能夠調試 tvOS Top Shelf 擴展。
• 在安裝或調試應用程序時,Xcode 可能更喜歡使用 Wi-Fi 鏈接到 Watch。 (50313856)
注意
iPhone-Watch 對必須位於相同的 2.4 GHz 網絡上。沒法使用不容許 peer-to-peer 的網絡。
• 斷點的 VoiceOver 操做菜單包括跳轉到相應代碼行的操做。
• 使用約束調試視圖時,雙擊 size inspector 中的約束會在編輯器中選擇該約束,並在檢查器中顯示約束的信息。
• LLDB 的 Python 腳本如今基於 Python 3。若是您使用的 Python 擴展與 Python 3 不兼容,它們將會中斷。爲了幫助完成轉換,您能夠經過設置默認值來運行 Python 2 模式:
defaults write com.apple.dt.lldb DefaultPythonVersion 2
複製代碼
將在將來刪除對 Python 2 的支持。
• Swift NSDecimal 值在 LLDB 中有一個數據格式化程序,使它們以可讀的方式顯示。
• iOS SDK 中再也不包含 WatchKit framework。若是您使用的是 iOS 中的 WatchKit API,則須要刪除此類操做。watchOS 上仍然提供 WatchKit 框架。
• 腳本語言運行時(如Python,Ruby和Perl)包含在 macOS 中,以與舊版軟件兼容。在 macOS 的將來版本中,默認狀況下,腳本語言運行時將不可用,而且可能須要您安裝其餘軟件包。若是您的軟件依賴於腳本語言,建議您在應用程序中捆綁運行時。
• 不建議使用 Python 2.7。此版本包含在 macOS 中,以與舊版軟件兼容。將來版本的 macOS 將不包括 Python 2.7。相反,建議您在終端中運行python3。
• 從 macOS 10.15 開始,Quartz Composer 框架被標記爲已棄用,但出於兼容性目的仍然存在。若是您的應用使用 Quartz Composer,請轉換到 Core Image,SceneKit 或 Metal 等框架。
• Instruments 如今容許一次從表中複製多行。
• Instruments 容許建立範圍,以便在跟蹤文檔中更輕鬆地導航。
• Custom Instruments 中提供了 <os-signpost-point-schema>
來匹配來自 os_signpost(_:dso:log:name:signpostID:)
的事件。
• Interface Builder 支持 iOS 13 UIVisualEffectView 模糊和 vibrancy 視覺效果。
• Interface Builder 支持iOS 13 UIActivityIndicatorView 樣式。
• iOS 家用指示燈顏色如今適應淺色和深色 canvas 外觀。
• Interface Builder 支持自定義 UIButton 符號配置。
• Interface Builder 支持 Apple TV 上的新佈局TVCollectionViewFullScreenLayout。
• UIViewController 實例如今默認爲 Automatic modal 演示模式。模態演示 segues 能夠覆蓋此設置。
• Interface Builder 支持 iOS 上的 Dark Mode。
• Interface Builder 的設備欄可以讓您在 iOS 應用程序的淺色和深色外觀之間切換。
• 您能夠添加 SwiftUI 主控制器,例如 UIHostingController,以將故事板控制器流鏈接到管理 SwiftUI 視圖層次結構的主控制器。您能夠經過提供以編程方式設置控制器的 rootView 的自定義子類來填充 Interface Builder 中託管控制器的內容。
• 您還可使用 Segue Action 設置 UIHostingController 或 NSHostingController 的根視圖。
• 對象庫如今與所選的系統範圍外觀匹配。
• NSStackView 檢查器如今容許配置負間距。
• 在 macOS 10.15 上運行時可使用 NSSwitch。
• UITableView 中的單元格如今可使用畫布中的自動佈局約束視圖自行調整大小。要選擇現有表視圖的行爲,請爲表視圖估計的項目大小啓用 Automatic
設置,爲 Size inspector 中的「單元格高度」啓用 Automatic
。
• NSView 和 UIView 在 Size inspector 中具備佈局模式選項,以明確選擇「translates autoresizing mask into constraints」。默認設置爲 Automatic,這是現有行爲。Automatic 意味着當視圖受故事板或 .xib
文件中的約束影響時,「translates autoresizing mask into constraints」是 off 狀態,但若是不受約束則是 on 狀態。
• 使用 Add Missing Constraints 提升了自動佈局約束生成的可靠性。
• UIScrollView 的內容能夠在畫布中滾動,一旦其子視圖徹底受到自動佈局約束的約束。
• 如今,UICollectionView 中的單元格可使用畫布中的「自動佈局」約束視圖進行自我調整。要選擇現有集合視圖的行爲,請爲集合視圖的估計大小啓用 Automatic 設置,並從 Size inspector 啓用單元格大小的 Automatic 設置。若是在 iOS 13 以前部署,則能夠經過在 viewDidLoad 期間調用 performBatchUpdates:completion:
來激活自調整大小的集合視圖單元格。
• 在檢查器字體彈出框中,Family 彈出窗口如今將菜單項呈現爲適用字體的預覽。
• 如今能夠在文檔範圍內對錯放的幀執行 Update Frames 操做,而無需選擇視圖。
• UIScrollView 支持內容和框架佈局指南,能夠在 Size inspector 中啓用,以便更好地控制可滾動內容。
• Interface Builder 支持新的 Apple TV tab 欄樣式。
• 新的 WKInterfaceTextField 接口元素可用於 watchOS。
• canvas 支持爲 Mac Catalyst 應用程序定製界面。
• SF 符號在圖像檢查器屬性中可用。
• UIImageView 檢查器包括對配置符號的支持。
• 使用新的 @IBSegueAction
屬性註釋的視圖控制器方法可用於在代碼中建立segue的目標視圖控制器,使用具備任何所需值的自定義初始化程序。這使得能夠在故事板中使用具備非可選初始化要求的視圖控制器。在源視圖控制器上建立從 segu e到 @IBSegueAction 方法的鏈接。在支持 Segue Actions 的新操做系統版本上,將調用該方法,它返回的值將是傳遞給 prepareForSegue:sender:
的 segue 對象的destinationViewController。能夠在單個源視圖控制器上定義多個 @IBSegueAction 方法,這能夠減小在 prepareForSegue:sender: 中檢查 segue 標識符字符串的須要。
IBSegueAction 方法最多須要三個參數:coder、sender 和 segue 的標識符。第一個參數是必需的,若是須要,能夠從方法的簽名中省略其餘參數。必須將 NSCoder 傳遞到目標視圖控制器的初始化程序,以確保使用故事板中配置的值自定義 NSCoder。該方法返回一個視圖控制器,該視圖控制器與故事板中定義的目標控制器類型匹配,或者返回 nil,以使用標準 init(coder:)
方法初始化目標控制器。若是您知道不須要返回 nil,則返回類型能夠是 non-optional 的。
在 Swift 中,添加 @IBSegueAction 屬性:
@IBSegueAction
func makeDogController(coder: NSCoder, sender: Any?, segueIdentifier: String?) -> ViewController? {
PetController(
coder: coder,
petName: self.selectedPetName, type: .dog
)
}
複製代碼
在 Objective-C 中,在返回類型前面添加 IBSegueAction:
- (IBSegueAction ViewController *)makeDogController:(NSCoder *)coder
sender:(id)sender
segueIdentifier:(NSString *)segueIdentifier
{
return [PetController initWithCoder:coder
petName:self.selectedPetName
type:@"dog"];
}
複製代碼
已解決的問題
• Connect-to-source popover 字段支持剪切,複製,粘貼和全選。
• 在設計或運行 macOS 時,更正了UILabel,UITextField 和 UITextView 實例的對齊,並在 Interface Builder 中將對齊設置爲「center」或「right」。
• UIDatePicker 的檢查器如今僅顯示適用於所選模式的屬性。
• 用於添加 iOS 設備的預覽編輯器菜單如今與當前畫布方向匹配。
• 預覽編輯器項目如今保留配置的區域設置或僞語言設置。
• 在 Interface Builder 中配置爲 Count Down 的 UIDatePicker 對象如今在運行時使用指定的 duration。
• 在不使用自動佈局的文檔中也能夠看到 Embed In 按鈕。
• NSControl 的子類如今在庫和文檔大綱中具備惟一的圖標。
• 修復了在 iOS 13.0 以前設置爲部署的 XIB 文件中的系統顏色在運行時沒法適應系統外觀的問題。
• 如今能夠在 asset catalogs 中本地化資源。在屬性檢查器中啓用了本地化。
• 設置包如今包含在 Xcode Localization Catalogs 中。
• genstrings的手冊頁更詳細地記錄了它的行爲。
• genstrings 工具已加強並與 extractLocStrings 工具合併。之前的版本已棄用,已重命名爲 ogenstrings,如今必須使用 xcrun 調用。任何調用 xcrun extractLocStrings 的腳本都應該更改成使用 genstrings,可是當前提供了一個調用 genstrings 的兼容性符號連接。
• genstrings 工具如今採用 -encoding
參數,容許指定輸入文件的文件編碼。
• genstrings 的更新版本改進了錯誤報告,並可能報告之前默默接受的方案中的錯誤。例如,若是 MyApp 目錄包含子目錄,則 genstrings MyApp/*
將失敗,由於 genstrings 文件參數必須是源文件。
• genstrings 工具如今可使用任意數量的 -s
參數來指定相似於 NSLocalizedString 的其餘宏或從中提取字符串的函數。例如,genstrings -s MyErrorSring -s MyUIString myfile.swift
將 MyErrorString 和 MyUIString 視爲等效於 NSLocalizedString。
注意
使用
-s
參數不會抑制對 NSLocalizedString 或 CFCopyLocalizedString 的支持。
• Export for Localization 命令和 genstrings 工具如今支持多行 Swift 和 Objective-C 字符串,並在識別 NSLocalizedString 的參數時放寬了空格要求。
• Export for Localization 命令的性能獲得了顯着改善。
• 新的 Metrics organizer 顯示您的應用程序的電池壽命和性能分析,以幫助您推進優化。在 App Store 上分發並通過充分的現場使用後,會爲您的應用報告指標。可用的指標包括電池消耗,啓動時間,掛起率,內存和磁盤寫入。您能夠按設備和使用特徵過濾數據。
• 支持 SwiftUI 實時視圖和 playgrounds 中的內聯結果。
已解決的問題
• 若是您的代碼引用了主線程的視圖,則Playgrounds不會再崩潰。(46579594)
• Xcode 可使用 Find navigator 在 workspace 或 project 中查找 assets。Asset catalog Editor 還支持查找和替換,您可使用替換重命名 assets。
• 在 AR 場景中添加了對象錨點的支持。
已解決的問題
• 其餘場景的通知觸發和通知操做再也不出如今未編寫的場景中。
• Xcode Server 如今支持 Mac Catalyst 應用程序。
已解決的問題
• 解決了 Xcode Server 沒法自動簽署使用 iCloud,應用程序組,Apple Pay或Wallet功能的項目的問題。
• 簽名和功能設置如今組合在 Project Editor 中的新的 Signing & Capabilities 選項卡中。新選項卡容許跨多個構建配置使用不一樣的應用程序功能。新功能庫能夠搜索可用功能。
• Xcode 11 支持新的 Apple Development 和 Apple Distribution 證書類型。這些證書支持在任何 Apple 平臺上構建,運行和分發應用程序。預先存在的 iOS 和 macOS 開發和分發證書繼續有效,可是,您在 Xcode 11 中建立的新證書使用新類型。之前版本的 Xcode 不支持這些證書。
已解決的問題
• 解決了 Xcode 錯誤報告的問題:上傳到 App Store 時「No iTunes Connect access for the team」。
• Simulator 能夠根據當前電源自動選擇 macOS GPU。當您的 Mac 鏈接到交流電源時,將使用獨立的 GPU。當您的 Mac 使用電池供電時,將使用集成 GPU。您能夠經過 File > GPU Selection 來更改模擬器中的策略。
• simctl
如今能夠覆蓋 iOS 設備的狀態欄值。例如,要設置時間和電池,請使用:
xcrun simctl status_bar <device> override --time「9:41」 - batiteState charge --batteryLevel 100
複製代碼
有關所有選項,請參閱 xcrun simctl help status_bar
。
• 在 macOS 10.15 上運行時,Metal 可用於 iOS 13 和 tvOS 13 模擬器。Metal 代碼在主機 Mac GPU 上執行,而且明顯快於模擬的 OpenGL 代碼。 (watchOS 6.0 模擬器中的系統 API 也是 GPU 加速的。)SceneKit,CoreAnimation 和其餘系統框架中的 API 抽象出 GPU 之間的許多差別,從而減小了對特定於設備的代碼的需求。在早期版本的 macOS 上運行或在 Metal 不可用的環境中運行時,模擬器繼續使用軟件渲染的 OpenGL。若是您的 Mac 有多個 GPU,請使用 Simulator 中的 File 菜單選擇要使用的 GPU。若是正在使用的 GPU 變得不可用,則使用它的任何模擬器都會自動關閉。
• 默認狀況下,Xcode 再也不建立每一個可用的 iOS 模擬器設備。而是建立一組最經常使用的設備。要建立其餘設備 - 或設備的多個實例 - 打開 Devices 窗口,選擇 Simulators,單擊「+」按鈕,輸入名稱,而後選擇相關的設備類型和操做系統版本。在終端中,執行 xcrun simctl create <name> <device type> <OS version>
命令,例如 xcrun simctl create "My iPhone 7" "iPhone 7" iOS13.0
。
• CAMetalLayer 可在 iOS 13 和 tvOS 13 模擬器中使用。
• iOS 13,watchOS 6 和 tvOS 13 模擬器如今都有一個 dyld 共享緩存。這樣能夠縮短模擬器的啓動時間,並減小模擬器進程使用的打開文件句柄數量。
注意
丟失的符號崩潰如今可能提到共享緩存,但這不是共享緩存錯誤。該消息僅告知您在搜索符號時查詢了共享緩存。
• simctl 如今接受運行時名稱的短別名。這意味着您可使用 simctl create'iPhone X'iOS13
等命令建立新的 iPhone X 模擬器。
• 對於 headless 和持續集成方案,您能夠經過設置 defaults write com.apple.CoreSimulator FramebufferServerRendererPolicy
爲 none 來配置 CoreSimulator 以跳過虛擬幀緩衝區中的合成操做。在此模式下,沒法查看模擬器,而且 simctl io 沒法截取屏幕截圖或錄製視頻。
• 沒有 CFBundleVersion 的捆綁包無效,沒法在設備或模擬器上正確安裝。 CoreSimulator 如今可使用更清晰的錯誤消息在流程早期檢查和拒絕此類 bundle 包。
• 模擬器 dock 圖標如今包含一個快速啓動模擬器的菜單。
• Simulator 的 File 菜單如今包含一個 GPU 選擇菜單,用於控制 Metal 支持在模擬器中使用哪一個 GPU 以及經過 Simulator 的虛擬幀緩衝進行合成。若是選中 Use External GPU When Available 項,則在鏈接外部 GPU 後啓動的任何模擬器都使用外部 GPU。若是外部 GPU 斷開鏈接,則使用它的任何模擬器都會自動關閉。對這些設置的更改僅在引導模擬器時生效。更改此設置時已啓動的模擬器將繼續使用先前選擇的 GPU,直到它們從新啓動。
已解決的問題
• IOSurface 如今可用於iOS 13,watchOS 6和tvOS 13模擬器。
• 模擬器中再也不自動播放音頻的應用程序也會打開麥克風進行輸入。
• 將刪除 simctl list 的 JSON 輸出中先前棄用的可用性字段。 使用 isAvailable 布爾字段肯定可用性。
• 修復了若是啓用了自動粘貼板同步,則可能致使模擬器在其餘應用程序中與剪貼板相關的操做後崩潰或無響應的問題。
• 在 Safari 中播放視頻時更改模擬設備中的音頻不會使視頻的音頻靜音。
• 如今,Metal 着色語言支持語義突出顯示,代碼完成,實時問題,符號搜索和跳轉到定義。
• 經過單擊 Source Control Change Bar 並選擇 Show 或 Hide Change,能夠在 Source Editor 中查看內聯代碼差別以查找更改。
• 添加了新的 High Contrast (Dark) 主題和 High Contrast (Light) 主題。還爲標記,類型聲明和其餘聲明添加了新設置。
• 爲 Swift 文件中的聲明添加了專用語法着色,能夠在 Type Declarations and Other Declarations 下的 Preferences > Fonts & Colors 中進行自定義。不支持 C 系列語言的聲明着色。
• Xcode 的源代碼編輯器如今支持拼寫檢查。
• Xcode 11 的源代碼編輯器引入了該文件的 mini-map。mini-map 包括Mark:
的清晰文本,突出顯示有錯誤和警告的行,源控件更改,斷點和突出顯示的查找結果。mini-map 默認啓用,能夠按編輯器關閉。
• 在文檔註釋和 playground 標記中添加了標記的語法突出顯示。您能夠在 Documentation Markup 下的 Preferences > Fonts & Colors 中自定義字體,並在 Preferences > Text Editing > Display 中自定義分隔符外觀。
• Toggle Comments 支持多個遊標。
• 拖放文本時,行之間會打開空白區域,以便更容易查看文本的刪除位置。拖動整行時,Xcode 只容許在其餘行之間發生拖放。
• 編輯器容許分層代碼摺疊。
• 代碼摺疊支持方括號和括號。
• //MARK:comments
和 #pragma mark
指令如今在編輯器中繪製一個分隔線。顯示標記分隔符的首選項位於 Preferences > Text Editing > Display > Show Mark Separators 中。
• 添加了控制 switch 語句中 case 標籤縮進的選項。這能夠在 Preferences -> Text Editing -> Indentation 下單獨控制Swift和C系列語言。
• 在 Preferences> Text Editing> Indentation 中添加了一個用於控制 C++ 命名空間和外部C代碼塊內縮進的選項。
• 默認狀況下,粘貼的文本再也不從新縮進,但調整初始空格以匹配周圍的文本。可使用 Preferences > Text Editing > Indentation 來控制此操做。
• 添加了對 YAML 文件語法着色的支持。
• 靜態分析器檢查在 mach 服務器例程中是否違反 MIG 調用約定。這些違規行爲可能致使無償使用後的漏洞。(35380337)
• 靜態分析器檢查有關 out-parameters 的 IOKit 和 libkern 引用計數規則的違規。
• 靜態分析器檢查違反 DriverKit 引用計數規則。這些違規行爲可能致使泄密和無償使用後的問題。
• 測試計劃編輯器如今支持在命令行參數和環境變量條目中擴展構建設置變量時選擇要使用的目標。 (51841050)
• 支持編寫與 SwiftUI 視圖交互的 XCTest UI 測試。
• Test Plans是管理運行哪些測試以及這些測試如何運行的新方法方案能夠引用多個測試計劃,併爲自動化定義默認測試計劃。新的測試計劃編輯器支持定義測試配置,能夠從計劃自己繼承共享設置。在 Xcode 中運行測試如今能夠在全部測試配置中運行測試。更新 Source Editor 測試 diamonds 以支持在單個配置中運行測試,並更新 Test Navigator 以容許選擇活動的測試計劃。更新測試報告以支持顯示測試計劃生成的結果。
• XCTest 包括加強的性能測試功能和新的 measureWithMetrics:options:block:
方法和相關方法。 metrics 參數須要符合 XCTMetric 協議的對象列表。您能夠實現本身的自定義指標,也可使用 XCTClockMetric,XCTOSSignpostMetric,XCTCPUMetric,XCTMemoryMetric 或 XCTStorageMetric。
下面顯示了一個示例性能測試,用於測量排序列表的 CPU 和內存影響:
func testExample() {
// Measures the CPU and memory impact of sorting the input list.
measure(metrics: [XCTCPUMetric(), XCTMemoryMetric()]) {
sortedList = qsort(list: self.fiftyNumbersFrom0to100)
}
}
複製代碼
• 添加了一個斷言函數 XCTUnwrap,用於 Swift 測試。XCTUnwrap 斷言 Optional 變量的值不是nil,若是斷言成功則返回其值。這樣就無需將 XCTAssertNotNil(_:_:file:line:)
與展開值或在其他測試中處理條件連接相結合。例如:
func testFirstNameNotEmpty() throws {
let forenames: [String] = customer.forenames
let firstName = try XCTUnwrap(forenames.first)
XCTAssertFalse(firstName.isEmpty)
}
複製代碼
XCTUnwrap 是一個拋出斷言,最好用於上面示例中的拋出測試方法。
• 除了原始報告和存檔文件以外,xccov 如今還支持直接傳遞結果包。例如,要查看結果包中的 coverage 報告,請按以下方式調用 xccov view --report /path/to/result_bundle.xcresult
。
• 結果包的格式在 Xcode 11 中更改。結果包是由 Xcode 11 生成的 asset,其 xcresult 文件擴展名包含有關構建,測試,代碼覆蓋率等的信息。Xcode 11 沒法讀取使用 Xcode 10 或更早版本生成的任何 xcresult 文件。能夠經過將 -resultBundlePath ./Example.xcresult
傳遞給 xcodebuild 調用來生成結果包,而後能夠在 Xcode 中打開 Example.xcresult。Xcode 還在派生數據中建立結果包。當前結果包版本號爲 3,能夠經過傳遞 xcodebuild 標誌 -resultBundleVersion 3
來指定。版本 3 是 Xcode 11 中的默認值,但仍建議自動化顯式傳遞標誌,以便任何潛在的將來版本成爲默認值不會致使現有工具出現問題。可使用 xcresulttool 檢查結果包。可使用xcrun xcresulttool get --format json --path ./Example.xcresult
導出結果包的根對象的 JSON 表示,而且能夠經過添加在 JSON 輸出中找到的任何嵌套對象(由其引用標識)來導出 flag --id REF
。xcresulttool 還使用 xcrun xcresulttool formatDescription
提供其格式的描述。
• 若是測試在多個目標上運行而且在某些目標上失敗而在其餘目標上成功,則測試報告將顯示描述測試失敗的目標的摘要,例如,Failed on iPad destinations running iOS 12.0。
• 查看在多個目標上運行的測試的測試報告(例如Xcode Server集成,或者由具備多個目標說明符的 xcodebuild 調用生成的結果包)時,如今能夠按目標過濾顯示的結果。單擊範圍欄中的設備按鈕將顯示測試運行的目標列表,包括隱藏或僅顯示感興趣的目標的功能。此外,如今能夠經過範圍欄中的 Mixed 按鈕過濾到僅在一個目標上失敗但在另外一個目標上成功的那些測試。
• xcodebuild 生成的結果包如今能夠直接在Xcode中共享,雙擊和打開。
• 介紹了爲 Mac Catalyst 應用程序編寫基於 XCTest 的測試的支持。
• 默認狀況下爲新建立的測試計劃啓用 Code Coverage。
• 在 macOS 上的 UI 測試中,鼠標移動(包括對懸停API的調用以及對點擊,滾動和其餘API的調用)將逐漸在屏幕上移動光標,就像用戶在實際交互中同樣,而不是當即移動光標到最終位置。對於涉及嚴重依賴鼠標懸停行爲的 UI 的測試,這可能會致使問題。
• 針對測試計劃修改 .xctestrun 文件格式,以包含有關如何在計劃中執行每一個測試配置的信息。當爲使用測試計劃的方案運行 xcodebuild build-for-testing 時,生成的 .xctestrun 文件使用 FormatVersion 2 並具備修訂的屬性列表結構。爲不使用測試計劃的方案生成的 .xctestrun 文件繼續使用 FormatVersion 1,而 xcodebuild test-without-building
接受任一版本。
• 測試計劃編輯器中的 Code Coverage 設置不支持選擇單個目標來收集代碼覆蓋率。若是經過將方案轉換爲使用測試計劃來建立測試計劃,而且該方案在轉換時選擇了單獨的代碼覆蓋目標,那麼這些目標將保留在生成的測試計劃中,但在計劃中不可編輯。
• xcodebuild 加強了支持測試計劃的新選項。使用新的 -showTestPlans
選項列出與方案關聯的全部測試計劃。使用新的 -testPlan <name>
選項指定與用於測試或構建測試的方案關聯的測試計劃。若是未指定 -testPlan <name>
,xcodebuild 測試將使用該方案的默認測試計劃。
• Xcode 11 引入了在 Xcode Localization Catalogs 中自動包含 XCTest 截圖的選項。在測試計劃或方案編輯器中啓用本地化屏幕截圖,而後在導出以進行本地化時選中「include screenshots」。
• 使用測試計劃運行測試時,如今能夠經過測試計劃的代碼覆蓋率設置配置要包含在代碼覆蓋率結果中的目標。