Xcode 10.2

原文連接c++

蘋果在此次春季發佈會後,正式發佈了 Swift 5 ,正式開啓了 Swift ABI 穩定時代。與 Swift 5 一塊兒,蘋果發佈了 Xcode 10.2,以支持 Swift 5 的開發。這個版本的 Xcode 新增了很多特性,同時解決了大量問題。咱們翻譯了 Xcode 10.2 Release Notes 文檔,以方便你們瞭解 Xcode 10.2。swift

文章比較長,建議主要了解新特性部分。因爲整理匆忙,翻譯有誤之處還請留言指正。數組

Xcode 10.2xcode

• 包含的 SDK:iOS 12.2, watchOS 5.2, macOS 10.14.4, tvOS 12.2promise

• 支持設備上調試的系統:iOS 8+, tvOS 9+, watchOS 2+緩存

• macOS 系統要求:10.14.3+安全

通用

新特性bash

• 支持使用 macOS 內容緩存進行下載。服務器

已解決的問題微信

• 解決了上傳到 App Store 不包含符號信息的問題。

Apple Clang Compiler

新特性

-Watomic-implicit-seq-cst 是一個新的警告標識,默認狀況下是關閉的,當以隱式的、順序一致的方式使用 C 語言的 _Atomic__sync_*,會發出警告。大多數代碼庫默認使用順序一致性(sequential consistency),但有些要求開發人員在r全部地方使用顯式排序。此警告適用於後一種狀況。(28172966)

• 使用引用包含(quote includes)的新診斷標識 framework header 代替了樣式包含(style includes)的 framework。默認狀況下警告是關閉,但能夠設置 clang 的 -Wquoted-include-in-framework-header 標識來啓用它。(37077034)

-Wmemset-transposed-args 是一個新的警告標識,用於診斷對轉換了第二個和第三個參數的 memset 的調用。例如,memset(buf, sizeof(buf), 0) 這個調用會使用新警告診斷。(42360478)

std::pair 的構造函數有條件的標記爲 noexcept,依據是其成員的相應構造函數是否爲 noexcept。這是一個符合標準的擴展,具備潛在的性能優點,在那些構造時不會拋出異常的類型上執行更快的構造操做。(29537079)

• 在 std::mapstd::set 中使用 non-const 可調用謂詞的警告如今顯示了錯誤容器的實例化信息而不是不相關的實現細節。(41370747)

• 不推薦使用 <experimental/any><experimental/optional> headers,而使用新的 C++ 17 的 header:<any><optional>。它們將在 Xcode 的將來版本中刪除,不該該依賴它們的存在。(46903112)

• 已刪除使用內聯宏來控制 libc++ headers 中符號的可見性,以支持更好的解決方案。這將優化包含 libc++ headers 的代碼的大小和性能,以及顯著改善使用 libc++ 時的調試體驗。(47259325)

• 框架中的公共 headers 可能會錯誤地 #import#include 私有 header,這會致使分層違規和潛在的模塊引用循環。有一種新的診斷報告了這種違規行爲。默認狀況下它在 clang 中是關閉的,由 -Wframework-include-private-from-public 標識控制。 (38712182)

• 在框架 headers 中使用 @import 可防止在沒有模塊的狀況下使用 headers。一個新的診斷標識在你傳遞 -fmodules 標識時會檢測框 headers 中是否使用 @import。默認狀況下,這個診斷在 clang 中是關閉的,並使用 -Watimport-in-framework-header 標誌進行控制。(39192894)

• 之前,在爲框架聲明模塊時省略 framework 關鍵字不會影響編譯,可是默默地作了錯誤的事情。一個新的診斷(-Wincomplete-framework-module-declaration)和一個新的修復建議添加適當的關鍵字。默認狀況下,將 -fmodules 標誌傳遞給 clang 時,此警告處於啓用狀態。(39193062)

已解決的問題

• 修復了在檢查 future 是否已附加到 std::async 中的 promise 時發生的數據競爭狀況。解決了 std::async 返回一個 non-void future 的問題,但對於返回 std::future<void> 的調用,該問題仍然存在。(42548261)

• 即便從命令行調用 clang 以在單個調用中進行編譯和連接時使用 -flto=thin 啓用增量 LTO,連接也會成功。(47297739)

• 如今能夠正確處理 std::regex 中的反轉字符類,例如 [\S]。(43060054)

dsymutil 再也不耗盡大型項目的系統內存。(41422573)

Asset Catalog

已解決的問題

• 解決了在爲本地或企業分發應用程序時影響應用程序與 iOS 9.0、9.1 和 9.2 上的兼容性問題。使用 Xcode 10 構建的應用程序其 Asset Catalog(部署目標爲 iOS 9.0,9.1 或 9.2)在使用本地或企業發佈分發時生成的內容與這些 iOS 版本的運行時不兼容。使用 Xcode 10.2 從新構建應用程序能夠解決此問題。(46893768,44535967)

• 改善了 Dark Mode 下的圖像切片模式。(39388416)

構建系統

新特性

Implicit Dependencies 如今支持在 Other Linker Flags 中查找使用 -framework-weak_framework-reexport_framework-lazy_framework-weak-l-reexport-l-lazy-l-l 指定的連接框架和庫的依賴關係。(7879587)

已知問題

• 若是您正在構建包含 Swift 代碼的 framework 並使用 lipo 建立支持設備和模擬器平臺的二進制文件,則還必須合併爲每一個平臺生成的 Framework-Swift.h 頭文件以建立支持設備和模擬器的頭文件。(48635615)

例如,若是您已經構建:

- iOS/Framework.framework
- iOS Simulator/Framework.framework
複製代碼

獲得:

- iOS/Framework.framework/Headers/Framework-Swift.h
- iOS Simulator/Framework.framework/Framework-Swift.h
複製代碼

建立一個新的:

- iOS + iOS Simulator/Framework.framework/Headers/Framework-Swift.h
複製代碼

新 Framework-Swift.h 的內容應該是:

#if TARGET_OS_SIMULATOR
<contents of original iOS Simulator/Framework.framework/Framework-Swift.h>
#else
<contents of original iOS/Framework.framework/Framework-Swift.h>
#endif
複製代碼

已解決的問題

• 當用做目標依賴項時,外部目標是正確排序的。(44775299)

• 解決了在啓用 COMBINE_HIDPI_IMAGESAPPLY_RULES_IN_COPY_FILES 設置時致使 Xcode 將 PNGJPEG 文件做爲 TIFF 文件處理的問題。(44623214)

OTHER_INPUT_FILE_FLAGS 構建設置(傳播源文件的自定義標誌)如今可用於使用新構建系統時的自定義規則腳本。(46067251)

.xcconfig 文件中的遞歸包含循環再也不使構建系統崩潰。(42023748)

• 如今,目標構建階段中爲 Core Data 模型文件定義的每一個文件標誌將傳遞給 Core Data 編譯器。(42919919)

Clang 靜態分析器

已解決的問題

• 靜態分析器如今會在使用內容被移動後的 C++ 對象時發出警告,除非在使用對象以前將其重置爲已知狀態。(41349073)

• 靜態分析器如今檢查是否違反了 IOKitlibkern 的引用計數規則。這些違規行爲可能致使泄密和 use-after-free 的問題。(46359592)

調試

新特性

• UIStackView 屬性如今能夠顯示在視圖調試器對象檢查器中。(36351873)

• 若是在調試時遇到內存資源異常,Xcode 如今能夠自動捕獲內存圖。您能夠在方案的運行設置 「Diagnostics」 選項卡中啓用內存圖捕獲。(45285932)

• 在 iOS 和 watchOS 上,當接近內存限制時,Xcode 會在 Memory Report 中顯示運行應用程序的內存限制。使用 InstrumentsXcode Memory Debugging 來優化您的應用程序,以儘量減小內存佔用。(40556954)

• 視圖調試器呈現更緊湊的3D佈局。(43523921)

已解決的問題

• 在 Assistant Editor 中顯示反彙編的速度獲得了改進。(31633031)

文檔查看器

新功能

• 能夠經過 SDK 可用性、引入版本和棄用來過濾符號文檔。還能夠過濾文檔以僅顯示文章或示例代碼。例如,您能夠過濾文檔以顯示 UIKit 等框架全部示例代碼。(45236860)

Instruments

已知的問題

• 在 watchOS 應用程序中 profile Swift 代碼時,Instruments 可能會崩潰。(47368181)

Interface Builder

新功能

• 雙擊 storyboard 再也不縮放。相反,使用觸控板上的捏合手勢或按住 Option 並滾動來進行縮放。 (29139870)

• Apple TV 的 Interface Builder 支持 TVUIKit 框架公開的用戶界面元素。 (35868606)

已解決的問題

• 修復了在從新打開 storyboard 後選中 Bindings inspector 中的 Bind to 複選框時可能發生的崩潰。(33348238)

• Interface Builder 預覽中的旋轉按鈕在 Dark Mode 下可見。 (42396497)

• 使用 @objc @IBAction 註釋時,Interface Builder 能夠正確解析 Swift 文件中的 Actions。 (25465675)

• 在資源目錄中指定的對齊矩形的圖像在 Interface Builder 畫布中正確呈現。 (46595020)

• 改進了若是 asset catalog 中的文件名不以 @2x 或 @3x 結尾,在 Interface Builder 畫布中的 2x 和 3x 插槽中圖像的固有大小。(44759471)

• 使用檢查器對 NSImageView 所作的更改如今能夠毫無延遲地可靠地反映在畫布中。 (30196881)

ibtool --export-string-file 包含在具備 NSCell 實例的控件上指定的本地化提示。(24421623)

• 解決了致使圖像在 storyboards 中顯示爲問號的問題。(42475635)

• 在 Interface Builder 畫布中呈現的圖像使用與所選設備匹配的比例因子進行渲染。(18703159)

• 在 asset catalog 中使用模板呈現模式標記的圖像在 Interface Builder 畫布中正確呈現。(29049562)

連接

已解決的問題

• 當主項目沒有用 Swift 編寫時,如今能夠在 dyld 緩存中找到 Swift 庫。 (48385698)

• 解決了致使連接器錯誤在問題導航器中顯示爲「Linker command failed with exit code 1」而不是顯示實際錯誤消息的問題。 (39141740)

LLDB調試器

新功能

• 如今能夠在閉包內的LLDB表達式評估中使用 $0$1,...。(20719448)

• LLDB 如今支持 C 變長數組。(39606394)

• LLDB調試器有一個新的命令別名 v,用於「frame variable」命令,用於在當前堆棧幀中打印變量。由於它繞過表達式求值程序,因此 v 能夠快得多,而且應優先於 p 或 po。(40066460)

已解決的問題

• 調試器如今能夠解析綁定到私有類型的泛型變量的類型。(38231646)

• 在 Swift 中使用 po 調試 watchOS 應用程序時,如今返回正確的結果。(47162433)

• 調試器正確支持內聯泛型上下文中的泛型變量。(28859432)

• Swift 詞典和集合的數據格式化程序更可靠。 (43045289)

本地化

新功能

• 打開使用任何已棄用的本地化標識符的項目如今會爲每一個使用的標識符生成警告。選擇其中一個警告會提供一個助手,用於將關聯的舊「lproj」目錄中的文件遷移到以等效新標識符命名的「lproj」目錄。若有必要,此過程還會將項目的開發區域更新爲新標識符。遷移的項目與舊版本的 Xcode 兼容。(9777671)

• 如今能夠爲項目開發區域導出和導入本地化信息。(41878212)

已解決的問題

• Xcode 如今更仔細地區分遺留的本地化標識符(如「English」)和現代本地化標識符(如「en」),並在項目文件和用戶界面中同時表示它們。(45469882)

• 建議對全部項目啓用 Base Internationalization,而且爲任何當前不使用 Base Internationalization 的項目提供升級,即便它們只有一個本地化。升級後的項目與之前版本的 Xcode 向後兼容。(15160454)

• 如今能夠將本地化添加到沒有任何本地化文件的項目中,而且不會提示您將文件複製到新的本地化目錄。(42771349)

Playgrounds

新功能

• Playgrounds 如今在運行時執行內存安全檢查。違反對內存陷阱的獨佔訪問的代碼,會給出診斷消息:「Simultaneous accesses to […], but modification requires exclusive access.」(SR-8126)(33820622)

已解決的問題

• 解決了阻止 Playgrounds 執行的問題。(47226381)

• 修復了使用輔助源碼編輯 Playgrounds 時可能發生的崩潰。(42097728)

• 修復了編輯包含佔位符的片斷時可能發生的崩潰問題。(43242401)

• 修復了一個問題,該問題可能會影響 Interface Builder 文檔中的更改在不關閉工做區窗口的狀況下反映在 Playgrounds 中。(46830864)

重構

已解決的問題

• 重命名重構如今正確地重命名帶有外部參數標籤的單個參數的函數,而且具備將相應參數做爲尾隨閉包傳遞的調用點。(42162571)

• 使用 Refactoring > Rename 重命名 document 如今會更新應用程序的 Info.plist 文件以做匹配 (41327509)

模擬器

已解決的問題

• 改善了與模擬設備交互的性能和響應能力。(47864185)

• 解決了沒法在具備大量模擬設備的 Mac 上啓動模擬設備的問題。(47712686)

• 解決了將多個聯繫人,照片或視頻項目同時拖動到模擬設備窗口時發生的故障。(46736098)

• macOS 和模擬 iOS 設備之間的粘貼板同步更可靠。(46817121)

• 如今,您只需提示一次受權麥克風訪問,就可使用全部模擬器設備。(45715977)

• iPhone XR 模擬器的交互性能和響應能力已獲得改進。 (44657262)

Source Control

新功能

• Xcode 使用 SSH 配置輸出來肯定應該使用哪一個 SSH 密鑰對來驗證給定的遠程倉庫。 (47302670)

已解決的問題

• 除了用於鏈接到 Git 服務器的 PEM 格式以外,Xcode 如今還支持使用 OpenSSH 格式的 SSH 私鑰。 (40867126)

• 解決了致使 SSH 密鑰密碼 keychain 查找失敗的問題。(47578552)

代碼編輯

新功能

• 「Fold Methods & Functions」 編輯器菜單項能夠摺疊 Swift 中的計算屬性。(43428274)

• Code completion 在計算屬性聲明中提供 get,set,didSet 和 willSet 做爲可能的實現。(20957182)

• 在可選枚舉類型的上下文中,除了 Optional.noneOptional.some(_:) 以外,code completion 會提示枚舉的其它 case。(23549753)

已解決的問題

• 重寫 UITableViewController 方法時,Code completion 不會出現重複的委託方法名稱。(21161476)

• 引用不一樣的文件的 Fix-its 操做將不適用於當前文件。(31371021)

• 被拖動的文本顯示爲透明圖像。(31890166)

• 代碼編輯器如今使用系統顏色做爲佔位符。(32307338)

• 在佔位符以前直接鍵入換行符時,編輯器不會填充佔位符。(32853933)

• 修復了若是包含標記的行已被編輯,則使用 Mark 在 Swap 中發生崩潰 (41874263)

• 打開摺疊功能區時,編輯器中的打字和滾動性能獲得改進。 (42941556)

• 修復了換行的一致性。 (44520372)

• 修復了顯示三個助理編輯器時發生的崩潰。 (45230485)

• 修復了輸入具備多個遊標的換行符時發生的崩潰。 (45601228)

• 當關閉換行時,提升了使用摺疊代碼滾動源文件的速度。 (45712602)

• 改進了使用黑暗主題時警告和問題的顯示。 (44925116)

(略)

Swift

• 請參閱 Swift 5 Release Notes for Xcode 10.2 developer.apple.com/documentati…

測試

新功能

xccov 支持將多個覆蓋報告及其關聯的歸檔合併到一個彙總報告和歸檔中。將報表合併在一塊兒時,對於在生成原始報表之間發生更改的源文件,聚合報表可能不許確。若是沒有代碼更改,則彙總報告和存檔會是準確的。有關更多信息,請參閱 xccov 手冊頁。 (38050969)

• xccov 如今支持區分 Xcode 覆蓋率報告,可用於計算覆蓋範圍隨時間的變化。 (43439165)

• 靜態庫和框架目標如今做爲頂級條目顯示在 coverage 報告中,其中行覆蓋值在包含靜態庫或框架的全部目標中聚合。這也解決了靜態庫或框架目標的源文件將包含在 coverage 報告中的問題,即便目標自己已從方案中的代碼覆蓋範圍中排除。(22578123)

已知的問題

• Swift initializers 顯示在覆蓋率報告中,沒有名稱。(47467864)

• 啓用 Parallelization 時,Clones 中的錄製無效。 (43699252)

• 若是同一 PRODUCT_NAME 存在多個測試主機目標,則會爲測試目標選擇錯誤的測試主機應用。(46475115)

• 啓用測試並行化時,性能分析測試不正常。 (44836817)

解決方法:導航到 Product > Scheme > Edit Scheme > Test > Info,選擇測試目標旁邊的 Options ,並禁用「Execute in parallel」,以在分析時禁用並行測試。

已解決的問題

• 解決了致使 Swift 源文件中的方法在 coverage 報告中命名爲「Definition at <line>:<column>」的問題。(46432533)

XCUIScreen 如今正確實現了 isEqual:hash。(32179407)

• 當單擊代碼編輯器以獲取存在於多個測試目標中的測試方法或類時,或者對於由子類繼承的測試方法時,Xcode 如今會顯示一個菜單,容許選擇要運行的單個目標或類(或所有)選定的測試。(45975871)

• 解決了可能阻止在 coverage 報告視圖中展開文件的問題。(44458167)

• 若是因爲某種緣由(例如運行時連接失敗)在測試期間沒法加載測試包,Xcode 如今會報告描述失敗緣由的描述性錯誤消息。若是您正在使用 xcodebuild,則此失敗信息存在於測試活動日誌中並顯示在 stdout 中。結果包中包含的結構化日誌中也存在該錯誤。 (45242409)

• 若是因爲測試運行器在啓動時崩潰而致使測試失敗,Xcode 會嘗試生成描述失敗的詳細錯誤消息。若是您正在使用 xcodebuild,則此失敗存在於測試活動日誌中並顯示在 stdout 中。結果包中包含的結構化日誌中也存在該錯誤。(29148418)

• 若是在測試運行時 xcodebuild 被 SIGINT 信號終止,則會將有效的結果包寫入磁盤,幷包含在終止以前完成的測試的結果。一樣,若是取消在 Xcode 中運行測試,則會生成一個包含已完成測試結果的有效結果包。(45022325)

• xcodebuild 或 Xcode 的第二個實例不會刪除在並行分佈式測試期間建立的模擬器拷貝。(40738122)

• 解決了可能致使多個目標中包含的文件的代碼覆蓋率不正確的問題。(40409346)

• 在測試期間收集的崩潰報告再也不遺漏重要字段,例如終止緣由和描述。(44405884)

• 未明確包含在目標的 Headers Build Phase 中的 headers 再也不出如今 coverage 報告中的目標條目中。這解決了一個問題,其中不須要的 headers 可能出如今目標的覆蓋率報告中 - 例如來自連接的框架或庫。若是您發現覆蓋率報告缺乏 header,請確保它們包含在相應目標的 Headers Build Phase 中。 (36187447)

• 具備多個測試目標的項目(每一個測試目標包含一個繼承自共享 XCTestCase 子類的測試類)再也不顯示來自其餘目標的不存在的運行時(「rT」)測試。(46042417)

關注咱們

歡迎關注咱們的公衆號:zsxjtip,也歡迎加入咱們的羣組討論問題。能夠加微信 coldlight_hh/wsy9871 進入咱們的 iOS/flutter 微信羣。

相關文章
相關標籤/搜索