Xcode8 新特性數組
Interface Builderapp
在Xcode8中,蘋果推出了更增強大的可視化編輯工具預覽功能,能夠在不運行App的狀況下,預覽當前XIB或SB在不一樣屏幕尺寸下的顯示。框架
選擇一個XIB文件進去,點擊下面紅框的位置,會出現從3.5寸-5.5寸一系列屏幕尺寸的選項。直接點擊不一樣屏幕尺寸,以及橫豎屏選項,切換不一樣的屏幕顯示。在iPad上還能夠選擇是否分屏,功能很是強大。工具
Interface Builder字體
在右邊有一個Vary for Traits選項,點擊這個選項就能夠同時顯示全部可選的屏幕樣式,功能和上面圖片都同樣,只是顯示上看起來比較多。ui
Interface Builderthis
還有一點,新建立的XIB控件尺寸,再也不是以前600*600的方塊了,而是默認是6s的長方形XIB文件,看起來舒服多了。插件
Target中General的變化debug
在Xcode8以前,都須要本身設置證書和描述文件。若是設置出現錯誤的狀況下,還能夠經過點擊Fix issue來修復這個錯誤。但這有個問題就在於,Fix issue選項並非那麼好用,有的時候設置是正確的這裏也提示須要Fix issue。代理
可能蘋果也意識到這個問題的存在,在Xcode8中能夠經過Automatically manage signing選項,讓蘋果爲咱們管理證書和配置文件,設置也都是由蘋果來完成的。在Xcode8中新建項目,這個選項默認是被勾選的。
在以前的項目中,若是想要設置安裝後顯示在手機上的App名字,還須要本身到Info.plist文件中,修改Display Name字段,而如今直接在General中就能夠作修改,這個修改和Info.plist是同步的。
若是本身到Build Settings中手動設置證書和描述文件,能夠發現Provisioning Profile選項已經被標明爲Deprecated,也就是蘋果並不推薦手動設置。
Xcode插件
升級Xcode8以後會發現,在Xcode8中全部第三方插件都失效了,而且連以前菜單欄的插件選項也不存在了。在以前不少iOS開發者,都是經過Alcatraz來管理插件的,如今Alcatraz也是不可用的。可是Xcode8自身也對編譯器進行了升級,將一些比較好的插件功能加入到Xcode中,例如單行高亮顯示等。
在Xcode8中支持了開發插件工程,而且爲咱們提供了一個插件模板,開發的插件能夠上傳到App Store下載。蘋果這麼作有一個緣由在於,以前Xcode和插件是運行在同一個進程的,因此插件的崩潰也會致使Xcode崩潰。蘋果如今將插件做爲一個單獨的應用程序,分開進程運行,不會對Xcode帶來其餘影響。
Runtime Issues
在開發過程當中,由於語法或明顯的代碼錯誤(例如Retain Cycle),編譯器能夠發現並報黃色或紅色警告。可是一些由於代碼邏輯致使的錯誤,編譯器並無辦法找到。例以下面的這句代碼,由於代碼邏輯的問題致使兩個數組相互引用,都不能釋放。
數組循環引用
這時候能夠經過Xcode8提供的Runtime Issues新特性,查找到運行過程當中出現的問題,並經過Graph的方式將問題可視化的展示給開發者。
Debug Memory Graph
在Xcode6中出現了Debug View Hierarchy新特性,能夠經過其調試當前App的視圖層級,查找UI相關的bug很是方便。在Xcode8中蘋果爲開發者提供了Debug Memory Graph特性,經過這個新特性,能夠直接選擇一個對象,查看與其相關的內存關係。
Debug Memory Graph和Runtime Issues能夠配合使用,經過Debug Memory Graph分析內存關係完成後,點擊Runtime Issues能夠看到已經發現的內存問題。
Swift 3
Xcode8帶來了新版本的Swift3,新版本的Swift變化較大,若是舊版的Swift項目在Xcode8上編譯可能會失敗。對此,蘋果爲開發者提供了Swift遷移工具,據說不太好用(我沒用過這個工具)。
若是不想馬上就遷移到Swift3,能夠在Builder Settings中進行設置,選擇Use Legacy Swift Language Version設置爲YES,就能夠繼續使用舊版本的Swift2.3。
Use Legacy Swift Language Version
其餘更新
Xcode新版字體,SF Mono Regular字體。更新Xcode以後我比較喜歡這種字體,看起來代碼很是工整。
被編輯的行高亮顯示。以前Xcode有個插件就是這個功能,Xcode8把高亮功能集成進來了,使用起來很方便。
最新版的API文檔,展現樣式發生了很大的改變。
更方便的生成文檔(就是喵神寫的VVDocumenter),在Xcode8中能夠將光標放在方法上面,經過option + command + /快捷鍵生成文檔註釋。
Xcode 8適配
XIB和Storeboard適配
在Xcode8以前,建立一個XIB或SB文件,都是一個600*600的方塊XIB文件。在Xcode8以後,建立的XIB文件默認是6s尺寸的大小。
可是Xcode8打開以前舊項目的XIB或SB文件時,會彈出下面的彈框, 這時候通常直接選擇Choose Device便可。
Choose an initial device view
可是這樣有個問題,若是Xcode8打開過這個XIB文件,並選擇Choose Device以後。其餘的Xcode8如下版本的編譯器,將沒法再打開這個文件,會報如下錯誤:
The document 「ViewController.xib」 requires Xcode 8.0 or later. This version does not support documents saved in the Xcode 8 format. Open this document with Xcode 8.0 or later.
有兩種方法解決這個問題:
你同事也升級Xcode8,比較推薦這種方式,應該迎接改變。
右擊XIB或SB文件 -> Open as -> Source Code,刪除xml文件中下面一行字段。
編譯錯誤
升級Xcode以後,Xcode8對以前的一些修飾符和語句不兼容,會致使一些編譯錯誤。這種錯誤致使的緣由不少,這裏大體列幾條,各位仍是根據自身遇到的狀況作修改吧。
以前一些泛型相關的修飾符,nullable之類的有的會報錯。
CAAnimation及其子類,設置代理屬性後,必須在@interface()遵照代理,不然報錯,等等。
權限適配
這應該算iOS10系統適配的範疇,最近這兩個都在弄,因此就直接和Xcode8適配一塊兒寫出來了。
在iOS10以後須要在Info.plist中,添加新的字段獲取權限,不然在iOS10上運行會致使崩潰。下面是一些經常使用的字段,若是有缺乏的麻煩各位評論區補充一下。
推送通知
蘋果的推送在以前iOS8和iOS9的時候就發生過大的更新,推送功能愈來愈強大。在iOS10以後蘋果推出了UserNotifications框架,能夠經過這個框架更好的控制推送通知,能夠更新、修改鎖屏頁面的推送消息,能夠添加圖片等功能。
可是在用Xcode8打包後,而且不對代碼進行修改的狀況下,會發現打包後蘋果發來了一封郵件。這封郵件大概意思是若是須要使用推送通知,須要對代碼作修改,不然將不能使用推送通知。
Push Notifications
這是由於在Xcode8以後,若是須要使用Push Notifications的功能,須要勾選Capabilities -> Push Notifications爲YES,不然進行遠程推送就會有問題,而且會收到蘋果發來的這封郵件。
刪除系統log
升級Xcode8以後,在調試和運行過程當中,發現控制檯打印了不少不認識的log,這些log是系統打印的,和開發者不要緊。可是這麼多log看着比較亂,怎麼屏蔽掉呢?
subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
在Target -> Edit Scheme -> Run -> Arguments中,添加OS_ACTIVITY_MODE字段,並設置爲Disable便可。
OS_ACTIVITY_MODE
順便提一下,這兩天在設置log選項的時候,發現能夠經過在Arguments中設置參數,打印出App加載的時長,包括總體加載時長,動態庫加載時長等。
在Environment Variables中添加DYLD_PRINT_STATISTICS字段,並設置爲YES,在控制檯就會打印加載時長。
控制檯打印信息
awakeFromNib報警告
老項目在Xcode8中,有些重寫awakeFromNib方法的地方,會報下面的錯誤。這是由於沒有調用super的方法致使的,還好我平時都是調用super的,我代碼目前還沒出問題。