前言
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
,當點擊重命名的時候,會有一個很炫的折疊動畫:
點擊某一個方法呢?
把之前的Extract Function
和Extract Method
直接放在了這個菜單。這樣我們就可以更加方便的把某些實現單獨提取封裝成方法了:
Simulator
讓我們打開模擬器看一看。
Wow!仿佛又回到了Xcode 5
之前,而且更加細膩了。
周圍的按鍵和 home
鍵都可以點擊的。
此外還發現了一些別的功能:
- 可以和別的版本的
Xcode
的模擬器共存。 - 除了可以使用
Command ? + 1
、Command ? + 2
、Command ? + 3
來縮放模擬器外,Xcode 9
還支持把鼠標移動到四個角的任意一個角來自由縮放. - 可以同時開啟多個不同的模擬器。
More
上面介紹的都是很容易就發現的一些新特性。要完全了解Xcode 9
,那就不得不去看官方的 Release Notes
那么,接下來就按照 Release Notes 的順序一個個來介紹。
首先,值得注意的是,
iOS 11
不再支持 32 位應用,如果我們在項目的target
->General
->Deployment Target
中設置系統為iOS 11
,則直接編譯都不能通過。如果設置為iOS 11
之前的,編譯還是可以的(敲黑板、劃重點了)。-
現在
Group
和Folder
關聯了一起。也就是說之前虛擬的工程文件夾現在會自動創建實體的文件夾,而無需我們去手動導入了(好評)。而且我們在拖動文件的時候,會自動更新文件和文件目錄,其他的一些操作,比如創建、重命名、刪除組都將會相應的更改文件系統中的關聯目錄。如果需要取消
Group
和Folder
的關聯,可以在File Inspector
中點擊X
就行:
同樣的,我們也可以在這里關聯某一個
Group
和Folder
。 自動匹配分隔符。當我們選中文字的時候,輸入任意一個
opening delimiter
,Xcode
都會 自動匹配closing delimiter
。自動匹配的分隔符包括:" "
,( )
,[ ]
,{ }
.個人感覺不太實用,因為我們可以直接在后面添加closing delimiter
,就可以自動補全opening delimiter
。
使用
command ?
+-
縮小文字,使用command ?
++
放大文字(終于支持了)。-
在
偏好設置
->Font & Color
中增加了光標的樣式。
Asset Catelog
現在支持了.avci
,.heic
,.heif
格式的文件。-
增加
主線程檢測器(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 navigator
的runtime
標簽中就會顯示出Warning
:
而點擊后直接定位到問題代碼:
而在
ToolBar
上的activity
面板也會有相關的信息。
從左至右依次是:編譯時 Warning、編譯時 Error、運行時 Warning.
-
Undefined Behavior Sanitizer
:一個新的運行時工具,可以檢查整數溢出(integer overflows)
、無效轉換(invalid casts)
等。我們可以在Scheme
里面管理這些功能:Undefined Behavior Sanitizer、Address Sanitizer、Thread Sanitizer功能暫時不太清楚,有了解的提供下,謝謝。
-
現在可以使用通過無線方式來調試程序了,而非必須使用數據線。
首先,想要無線調試,硬件系統必須達到要求:
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,會發現手機依然可以使用。并不會提示設備斷開連接之類的:
-
代碼管理的深度集成。現在,在
Navigator bar
上多了一個 Tab:Source Control
。無論你用的是SVN
還是Git
,現在都可以很方便的查看管理你的代碼倉庫:Branches、Tags、Remotes一覽無余。我們可以在這里 push、pull、merge、新建分支、切換分支、新增 Tag、查看提交歷史記錄、雙擊某一條 commit,對比代碼,添加忽略文件等等幾乎所有日常使用的一些基礎功能。
Xcode 9
與GitHub
深度集成,提供了包括配置 SSH key
、一鍵克隆
等功能。 -
新的編譯系統。新的編譯器已經用
Swift
重寫了,性能得到了很大的提升。其中,內部搜索功能官方號稱提速50x
.新的編譯系統默認是關閉的,如果我們想要體驗的話,需要在
File
->Project Setting
中選擇。 優化 Markdown。現在 Xcode 支持了 markdown 的高亮語法以及多級標題的字體大小。
在編輯區域的快速跳轉中,也能鏈接到更多的Header。
總結
使用下來,感覺Xcode 9
的誠意滿滿,蘋果終于要改變一下自家令人詬病的IDE
了。但Beta
版各種不穩定還是依舊,時不時的打不開模擬器,必須要完全退出Xcode
重新打開,穩定性還有待提高。
文中如有錯誤紕漏,歡迎指正????。