WWDC17 带来许多令人兴奋的好消息,iOS 11, Swift 4 和 Xcode 9,每个都有非常大的进步。但对 App 开发者来说,马上可以派上用场的莫过于 Xcode,毕竟我们开发的 App,可能不需要 iOS 11 的 AR 和 machine learning 功能,程式码也不见得会用到 Swift 4 的功能。因此,接下来的时间,我们就把时间交给 Xcode 9,看它大显神威吧。
如何下载 Xcode 9 beta
你可连到 XCODE 9 BETA 的下载页面下载。 注意,只有付给 APPLE 年费的尊贵开发者才能看到 BETA 版的 XCODE 9
没付费的一般开发帐号只能看到正式版的 Xcode 8.3.3。
接着,就让我们启动 Xcode 9,瞧瞧它的全新功能 !
1. 更棒的模拟器
模拟器终于有外框跟 home 键了
此外框可不是华而不实的装饰品,上面的按键都可以按呢! 按了 home 键会回到桌面,右上的睡眠/唤醒键会将 iPhone 荧幕打开或关闭, 左上的按扭则可切换静音和调整音量。
模拟器大小任你调
将滑鼠游标放在模拟器的右上(或是左上,左下,右下)后,即可自由拖曳调整模拟器的大小。
同时启动多个模拟器
从前我们一次只能跑一个模拟器,现在终于可以同时启动多个模拟器,享受钱很多,有很多 iPhone的感觉。启动多个模拟器的方法有以下两种:
从 Xcode 选择不同的模拟器,启动新的模拟器。
2.從模擬器 menu 上的 Hardware > Device,選擇新的模擬器啟動。
2. WiFi 无线安装 App
从前从前,有个人爱妳很久。哦,不是啦,彼得潘要说的是,从前从前,我们在开发 App 时得将iPhoen 麻烦地接线连到 Mac,然后再从 Xcode 将 App 安装到 iPhone。而且现在新的 Macbook 插孔愈来愈少,也许有一天,Apple 会推出无插孔的 Macbook,那我们岂不完全无法测试 App,只能转行卖鸡排 ?
为了未来的无插孔 Macbook 大计,Xcode 9 正式推出 WiFi 无线安装 App 功能,不需接线就可安装! 不过它有以下几个小小的限制。
你需要Mac要安装 Xcode 9 以上而 iOS装置要运行 iOS 11 以上的版本才能享用。
Mac 和 iPhone 需连到同一个 WiFi 网路。
为了将 App 无线安装到 iPhone,此 iPhone 需要先接线到 Mac 做设定,如此 Mac 才能认得这支iPhone,未来才能无线安装。操作的步骤如下:
接线连接 iPhone。
点选 Xcode menu 的 Window > Devices and Simulators。
3.勾選 Connect via network,從網路連線到 iPhone。如果連線順利,iPhone 旁將出現網路圖示,如下圖所示。
之后当我们拔掉线后,即可成为远距离高手,自由地无线安装。不过如果刚刚没有出现网路图示,或是拔线后,iPhone 就像断了线的风筝不理我们,在 Devices and Simulators 视窗显示Disconnected。此时 Xcode 找不到 iPhone,也就无法顺利安装 App。
别担心,我们还有一招大绝招,在 Devices and Simulators 视窗上选择 iPhone 后,从右键选单点选Connect via IP Address,输入 iPhone 的 IP 后,点选 Connect 连线。
至于 iPhone 的 IP Address,则可从 iPhone 设定 App 的 WiFi 页面查询。
3. 神乎其技的程式编辑器
更清楚的警告错误讯息和更方便的问题修正
在旧版的 Xcode,当有警告错误时,它只能一行显示,所以当讯息内容太多时,它无法完整显示,结尾将变成 …。
虽然有贴心的 Fix-it 功能帮我们修正问题,不过也是挺麻烦的,必须先点选错误的红色圆圈后,才会出现 Fix-it 提示。
这一切,在 Xcode 9 都变得更简单了。现在不只错误可以多行显示,连 Fix 也会贴心地自动出现,点选即可修正问题。
點選 Fix 後,自動幫我們修正問題,幫 url 補上!
程式碼的放大縮小
按住 command 加 + 可將程式碼放大,command 加 - 可將程式碼縮小。
聰明的範圍標示
將游標移到 { } 、( ) 或是 class、func、if、for 等關鍵字時,按住 command 鍵,Xcode 將聰明地標示對應的 class、function、if、for 區塊。
游標移到 func 上按 command 鍵:
游標移到 for 上按 command 鍵:
貼心的提示選單
跟剛剛一樣,將游標移到程式碼的某個目標上,按住 command 鍵,然後再用我們的一陽指輕輕點擊,即可出現貼心的提示選單。
比方如圖所示,游標停在 if 上,按住 command 鍵點擊後提示選單出現 Add “else” Statement 和 Add “else if” Statement,Extract Method 等選項。選擇 add “else” Statement 後,自動完成 else { } 的輸入。
值得注意的,在舊版 Xcode,按住 command 鍵再點擊其實是 Jump To Definition,比方跳到類別,function 的定義。現在 Jump To Definition 變成提示選單的一個選項。如果想利用快速鍵跳到定義,請按住 command + control 再點擊。
4. SWIFT 程式重構(REFACTORING)
重新命名(RENAME)
為了寫出更好的程式,我們時常需要將變數,類別,function 改名。很可惜,這看似簡單的小小心願,在舊版的 Xcode 卻只做半套,它支援 Objective-C,卻不支援 Swift。而在 Xcode 9,Swift 程式碼也可以改名了。
比方以下例子,我們想將 struct Movie 改成 NewMovie。
將游標移到 Movie 上,按住 cmd 鍵再點擊,從提示選單中選擇 Rename。
神奇的事發生了 ! Xcode 畫面上列出專案裡所有 Movie 出現的地方,橫跨多個檔案。
當我們將 Movie 改名為 NewMovie 時,更神奇的事發生了。所有的 Movie 同步變成 NewMovie,最後按下右上角的 Rename 即大功告成 !
自動加入需要定義的 PROTOCOL FUNCTION
Swift 的 protocol 是個很龜毛的人,一旦遵從它,就得把它一定要定義的 function 一一實現。尤其當你對遵從的 protocol 不熟時,還得研究一番才能摸清哪些 function 要定義。
在 Xcode 9,這些麻煩事都成過往雲煙了,讓我們看看以下例子:
ViewController class 遵從 UITableViewDataSource protocol,此時尚未定義相關 function,因此出現紅色錯誤。
點選 Fix,自動幫我們輸入 UITableViewDataSource 一定要定義的 2 個 function。
將程式碼變成 METHOD (EXTRACT METHOD)
在整理程式碼時,我們往往會發現一些可以獨立出來,變成 function 來呼叫的一段程式。從前我們只能土法煉鋼,使用複製貼上大法。現在不用這麼麻煩了,Extract Method 可以幫我們將一段程式碼變成 function,例如以下例子:
選取下載圖片的程式碼段落後,從右鍵選單點選 Extract Method。
整段程式碼變成 function extractedFunc,此時你還可利用 Rename 將 function 取個更好的名字。
程式碼重構轉換 OPEN SOURCE !
是不是覺得剛剛提到的這些功能很棒呀 ? 這只是起點而已,Apple 將 Xcode 的程式碼重構轉換 open source。換句話說,未來將有更多的英雄好漢一同來開發,發明更多幫助我們重構和轉換程式的酷炫功能。
5. 全面進化的版本管理
SOURCE CONTROL NAVIGATOR
左邊的 Navigator 區塊多了一個 source control navigator 分頁,現在可以更清楚地查詢和控制專案的版本管理。
建立 TAG 和 BRANCH
在新版的 Xcode,建立 tag 和 branch 變得像呼吸一樣簡單,例如以下例子:
在 source control navigator 頁面,從想指定 tag 的 commit 叫出右鍵選單,然後選擇 Tag “c197e26″。c197e26 為 git commit id 的結尾字串。
輸入 tag 名稱 v1.0,然後按 Create。
tag v1.0 成功生成,畫面上以粉紫色圖案顯示。
回到過去,切換到某個 COMMIT 版本
在 source control navigator 頁面,選擇第一個藍色 icon,可看到目前專案處在 second commit 的版本。
選擇 Initial Commit,從右鍵選單點選 Checkout,回到 Initial Commit 的版本。
雖然現實世界裡,時光機還沒發明,但在 Xcode 的世界,我們已經可以回到過去,專案變成 Initial Commit 的版本 !
深度整合 GITHUB
Xcode 和 GitHub 深度整合,現在從 Preferences 視窗的 Accounts 頁面即可設定專案連結的 GitHub 帳號。
在 Accounts 頁面按 +,選擇 GitHub。
輸入 GitHub 的帳號密碼。
設定成功後,在 Source Control Accounts 下可看到 GitHub 帳號。
將 XCODE 的專案建立上傳到 GITHUB
為了將 Xcode 專案上傳到 GitHub,從前我們得先在 GitHub 網站建好 Repository,然後再從 Xcode 將專案的 Remote 設為 GitHub 的 Repository,最後再執行 push 上傳。
在 Xcode 9,我們只要在 Xcode 操作即可實現剛剛的所有動作,步驟如下:
在 source control navigator 頁面,選擇第一個藍色 icon 後,從右鍵選單觸發 Create “Demo” Remote on GitHub。(Demo 是專案名稱)
填寫專案的相關資訊後,點選右下角的 Create 建立。
1.從 Xcode 的 menu 點選 Source Control > Clone
複製(CLONE)下載 GITHUB 帳號的專案
2.從 GitHub 帳號的專案清單視窗選擇有興趣的對象複製(clone)下載。
6. 更多的樣版
iOS App 多了製作 AR 特效的 Argumented Reality App 樣版和文件 App 的 Document Based App 樣版。
Playground 也可以選樣版了,有多達四種可以選。
7. 顏色也有名字
Assets.xcassets 現在除了加入圖片,還可以加入有名字的顏色,方便我們之後在 Storyboard 或程式裡使用,例如以下例子:
在 Assets.xcassets 頁面,從右鍵選單選擇 New Color Set 新增顏色。
編輯顏色的名稱和內容,可從右半邊的 Attributes Inspector 指定顏色,如圖所示,我們加入傳說中讓人一見鍾情的顏色 – 「Vergil的浪漫藍」。
在 Storyboard 指定元件顏色時,可在 Named Colors 下看到我們取的顏色名字。
我們也可從程式利用顏色名字生成 UIColor 物件。
8. DEBUG VIEW HIERARCHY 可以看到 CONTROLLER
Debug View Hierarchy 是個很棒的 debug 工具,方便我們在 App 執行時研究畫面的元件。可惜從前它少了顯示一個十分重要的角色,控制畫面的 controller。如以下例子,在 Xcode 8,我們只能看到 controller 的 view。
在 Xcode 9,控制畫面的大神 controller,終於可以現身,不再害羞隱藏,例如以下例子裡的 yayatrueLoveViewController。
9. 顯示 MARKDOWN 檔案
Xcode 支援漂亮地顯示 markdown 檔案,呈現對應的文字大小,而且還能理解檔案內容的階層,方便我們點選 jump bar 選單跳到檔案的某個段落
10. 支援 SWIFT 4 和 SWIFT 3.2
Xcode 9 預設搭配最新的 Swift 4,然而它也同時支援 Swift 3.2。更棒的是,當你的專案包含多個 target 時(比方搭配一些第三方套件),你可以部分 target 的程式是 Swift 4,部分 target 的程式是 Swift 3。
總結
以上介紹的,只是 Xcode 9 一些比較特別,比較重要常用的新功能,其實還有許多沒提到的新功能值得我們去發掘研究,比方幫助我們 Debug 的 Undefined Behavior Sanitizer 和 Main Thread Checker,方便 Continuous integration 測試的 Xcode Server。想要更深入認識 Xcode 9 的朋友,可直接從 Xcode menu 的 Help 查詢。
以下 Apple 官方網頁,也有更多關於 Xcode 9 的完整介紹。
1 What’s New in Xcode 9
2 Xcode 9 beta Release Note (需登入付費開發帳號才能看到)