What's new in Xcode 9

圖片來自官網

前言

WWDC過后, 蘋果發布了一系列的Beta 版固件及工具,我們單表其一,看看Xcode 9中的新功能。如果你也想體驗Xcode 9,那么你的 Mac 系統的版本至少是macOS 10.12.4.

初窺

Editor

打開Xcode 9之后,發現iOS標簽多了AR文件管理兩個。并且Framework的圖標也得到了統一。不再擬物。放個對比(左:Xcode 8,右:Xcode 9).

按照正常的套路,隨便新建一個工程。

打開工程的第一眼,就感覺編輯區域看起來更順眼了。和之前對比,發現是去掉了左邊顯示行號的邊欄顏色和編輯區域統一了,所以看起來更整齊了。

按著Command ? 鍵,隨便點一個方法,和之前不同的是,不會直接跳轉到方法的聲明,而是會出現下面的菜單:

如果想像之前一樣直接跳轉到函數聲明,則需要同時按著Control ?Command ?鍵再點擊方法可以跳轉到方法的聲明。

同樣,可以試著看看點擊變量有什么變化(PS:Xcode 9的代碼提示 real、real 快了很多):

恩,比上面的多了一個Rename,當點擊重命名的時候,會有一個很炫的折疊動畫:

rename

點擊某一個方法呢?


把之前的Extract FunctionExtract Method直接放在了這個菜單。這樣我們就可以更加方便的把某些實現單獨提取封裝成方法了:

extractedMethod

Simulator

讓我們打開模擬器看一看。

Wow!仿佛又回到了Xcode 5之前,而且更加細膩了。

周圍的按鍵和 home鍵都可以點擊的。

此外還發現了一些別的功能:

  • 可以和別的版本的Xcode的模擬器共存。
  • 除了可以使用Command ? + 1Command ? + 2Command ? + 3來縮放模擬器外,Xcode 9還支持把鼠標移動到四個角的任意一個角來自由縮放.
  • 可以同時開啟多個不同的模擬器。

More

上面介紹的都是很容易就發現的一些新特性。要完全了解Xcode 9,那就不得不去看官方的 Release Notes

那么,接下來就按照 Release Notes 的順序一個個來介紹。

  1. 首先,值得注意的是iOS 11不再支持 32 位應用,如果我們在項目的target -> General -> Deployment Target 中設置系統為iOS 11,則直接編譯都不能通過。如果設置為iOS 11之前的,編譯還是可以的(敲黑板、劃重點了)。

  2. 現在 GroupFolder關聯了一起。也就是說之前虛擬的工程文件夾現在會自動創建實體的文件夾,而無需我們去手動導入了(好評)。而且我們在拖動文件的時候,會自動更新文件和文件目錄,其他的一些操作,比如創建、重命名、刪除組都將會相應的更改文件系統中的關聯目錄。

    如果需要取消GroupFolder的關聯,可以在File Inspector 中點擊X就行:

    同樣的,我們也可以在這里關聯某一個GroupFolder

  3. 自動匹配分隔符。當我們選中文字的時候,輸入任意一個opening delimiterXcode都會 自動匹配closing delimiter。自動匹配的分隔符包括:" ", ( ), [ ], { }.個人感覺不太實用,因為我們可以直接在后面添加closing delimiter,就可以自動補全opening delimiter

auto_matched
  1. 使用command ? + -縮小文字,使用command ? + +放大文字(終于支持了)。

  2. 偏好設置 -> Font & Color 中增加了光標的樣式。

  3. Asset Catelog現在支持了.avci, .heic, .heif格式的文件。

  4. 增加主線程檢測器(Main Thread Checker)。我們都知道,我們在開發中都要在主線程訪問UIKit/AppKit。這經常會出現一些莫名其妙的問題:比如圖片加載需要一段時間,又比如嚴重的直接 Crash。如果想了解更多可以參考線程安全類的設計這篇文章。文中也提到了一個檢測是否是在主線程操作 UI 的非官方工具。現在,終于有了官方工具

    我們現擼個測試用例:

    dispatch_queue_t queue = dispatch_queue_create("com.newFunction", NULL);
    dispatch_async(queue, ^{
        UIView *view = [UIView new];
        [self.view addSubview:view];
    });
    
    

    運行后,如果是Xcode 9之前版本的話,我們可能會在控制臺獲得下面的 Log:

    This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.

    而現在,我們獲得 Log 信息更詳細了:

    [reports] Main Thread Checker: UI API called on a background thread: -[UIView init]
    PID: 59536, TID: 1305198, Thread name: (com.newFunction), Queue name: com.newFunction, QoS: 0

    除了警告原因,進程信息、線程信息都給了我們。更贊的是,在issue navigatorruntime 標簽中就會顯示出Warning:

    而點擊后直接定位到問題代碼:


    而在ToolBar 上的 activity 面板也會有相關的信息。

    從左至右依次是:編譯時 Warning、編譯時 Error、運行時 Warning.

  5. Undefined Behavior Sanitizer:一個新的運行時工具,可以檢查整數溢出(integer overflows)無效轉換(invalid casts)等。我們可以在Scheme 里面管理這些功能:

    Undefined Behavior SanitizerAddress SanitizerThread Sanitizer功能暫時不太清楚,有了解的提供下,謝謝。

  6. 現在可以使用通過無線方式來調試程序了,而非必須使用數據線。

    首先,想要無線調試,硬件系統必須達到要求:Xcode 9 or later、所以你的 Mac 系統必須是macOS 10.12.4 or later, iOS 11.0 or later,iPhone 和 Mac 處于同一 WiFi 下。

    然后,先使用數據線連接你的 Mac,打開Xcode 9中的Window -> Devices & Simulators菜單,如下:

    勾選Connect via network,之后左側的設備名字后面會出現一個網絡的圖標。這個時候就可以拔掉數據線了。

    回到 Xcode,會發現手機依然可以使用。并不會提示設備斷開連接之類的:


  7. 代碼管理的深度集成。現在,在Navigator bar 上多了一個 Tab: Source Control。無論你用的是SVN 還是Git,現在都可以很方便的查看管理你的代碼倉庫:

    Branches、Tags、Remotes一覽無余。我們可以在這里 push、pull、merge、新建分支、切換分支、新增 Tag、查看提交歷史記錄、雙擊某一條 commit,對比代碼,添加忽略文件等等幾乎所有日常使用的一些基礎功能。

    Xcode 9GitHub 深度集成,提供了包括配置 SSH key一鍵克隆等功能。

  8. 新的編譯系統。新的編譯器已經用Swift 重寫了,性能得到了很大的提升。其中,內部搜索功能官方號稱提速50x.

    新的編譯系統默認是關閉的,如果我們想要體驗的話,需要在File -> Project Setting中選擇。

  9. 優化 Markdown。現在 Xcode 支持了 markdown 的高亮語法以及多級標題的字體大小。

在編輯區域的快速跳轉中,也能鏈接到更多的Header。

總結

使用下來,感覺Xcode 9的誠意滿滿,蘋果終于要改變一下自家令人詬病的IDE了。但Beta版各種不穩定還是依舊,時不時的打不開模擬器,必須要完全退出Xcode重新打開,穩定性還有待提高。

文中如有錯誤紕漏,歡迎指正????。

Reference

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容