Xcode 7 最新特性
本文主要翻譯自蘋果文檔, 但不和原文完全一致.
蘋果原文連接
Swift 2.0

Swift 2.0 改進很大, 尤其是在現(xiàn)代化, 強大, 表達力, 易用性方面. 相比 Swift 1.2的新的特性有:
-
錯誤處理
現(xiàn)在Swift開始使用throw, catch來處理errors, 也就是高級語言中常見的異常處理機制, OC, Java, C#, C++等早已實現(xiàn). Swift 2.0 的錯誤處理機制和原有的NSError錯誤處理方式保持了無縫銜接. -
版本可用性檢查
版本可用性 幫助開發(fā)者檢查API在要發(fā)布的OS版本上是否可用. 假設(shè)你的發(fā)布目標(biāo)是支持iOS7及以后的系統(tǒng), 如果代碼中使用了一個iOS8中才有的方法, 在編譯時, 現(xiàn)在Xcode就會提示錯誤. 另外也可以標(biāo)記開發(fā)者自己寫的方法在哪個版本的OS上可用.
以前要達到類似的目的, 開發(fā)者需要自己去判斷系統(tǒng)版本, 判斷API在某個版本的iOS上是否可用, 現(xiàn)在蘋果給出了官方解決方案. -
可測試性
有了可測試性, 在單元測試的時候, 可以在測試中調(diào)用非公有的方法. -
協(xié)議擴展
協(xié)議現(xiàn)在可以通過擴展增加方法和屬性, 以前只有類和結(jié)構(gòu)體可以擴展. -
Swift 1.2 to 2.0 遷移
Xcode7 可以協(xié)助將Swift 1.2的代碼高效的遷移到Swift 2.0, 包括projects和playgrounds的代碼.
Swift代碼遷移
Objective-C 語言
為了能夠和Swift無縫的高效的結(jié)合, Objective-C進行了更新. 最新的特征包括:
-
泛型
因為Swift中集合的元素都是有類型的, 為了和Swift更好的兼容, 新版本里, OC開始支持泛型, 主要是在各種集合類型(比如數(shù)組, 集合, 字典)中使用. -
可空性標(biāo)注
因為Swift的代碼里面的主要類型默認(rèn)是沒有空值一說的, 只有可選類型才可以為空. 為了和Swift更好的結(jié)合, Objective-C中也加入了 可空性標(biāo)注 , 可以標(biāo)注是否期望一個值是否可空. -
Kind-Of.
通過使用 __kindof 聲明某對象是某種類型, 讓編譯器知道對象是某種類型或者該類型的子類, 可以用在泛型參數(shù)里. 使用 __kindof 對類型進行約束, 比指定某種類型或者id類型更靈活一些.
操場(Playgrounds)

Xcode6中引入的 操場 , 是一個探索和實驗Swift代碼的好地方. 在Swift 2.0里, 你可以使用操場來協(xié)助解釋怎么使用一個API, 或者示范一個概念.
-
操場寫作
Swift代碼里現(xiàn)在允許使用mardown來創(chuàng)建富文本的注釋, 更多參見: Playground Reference -
行內(nèi)結(jié)果
以前每行代碼的執(zhí)行結(jié)果顯示在timeline區(qū)域, 現(xiàn)在可以把結(jié)果的顯示移動到該行代碼的下面, 這樣看起來會更清晰. 行內(nèi)結(jié)果結(jié)果的可配置性比在timeline區(qū)域更好. -
資源
現(xiàn)在可以方便的把圖片, 音頻等資源方便的加入到操場中使用. -
輔助源碼
輔助源碼功能, 可以讓你吧一些輔助的代碼從操場中移出去. 這樣操場里的信息看起來就更清晰了. 另外輔助源碼會處于被編譯完成的狀態(tài), 實時解釋的只有操場中的代碼, 這樣運行起來會快很多. -
操場分頁
在Xcode7里面, 可以在一個操場里面包含多個頁面, 這樣方便你把相關(guān)的概念綁到一起.
詳情參見: Playground Help
App瘦身
Xcode 7現(xiàn)在可以開發(fā)多達3個平臺(我理解是指手表, iphone, ipad三個, 不包括mac電腦)上的應(yīng)用, 設(shè)備種類也很多. 不同的設(shè)備其容量和屏幕分辨率等規(guī)格各不相同. 針對同一個APP, 利用Xcode7和 iTunes App Store, 你可以為每種設(shè)備進行優(yōu)化, 該設(shè)備上用不到的圖片等資源, 就不下載到設(shè)備上.
-
Bitcode
在應(yīng)用打包傳到App Store的時候, Xcode會把應(yīng)用編譯成一種中間代碼bitcode(不是二進制的可執(zhí)行代碼). App Store會按照需要將bitecode編譯成64位或者32位的可執(zhí)行代碼. -
切片
放在AssetCatalog里的圖片, 可以通過打上標(biāo)簽, 讓不同的設(shè)備在下載app的時候, 選擇該設(shè)備需要的圖片. -
按需資源
在app下載安裝完成之后, app store可以存儲一些額外的資源. 這些資源可以打上標(biāo)簽, 按照一定的策略和控制進行下載.
詳情參見: App Thinning (iOS, watchOS)in the App Distribution Guide for detailed information.
調(diào)試
為了幫助開發(fā)者開發(fā)出更好的app, Xcode 7 增加了新的調(diào)試和程序分析特性
-
iOS電量儀器
Xcode 7 提供了電量儀器, 幫助你測量你的iOS app 使用的電量. iOS 9 加入了基于每個進程跟蹤電量的能力, 可以生成電量報表. 這是一種檢測你的app對電量影響的很棒的方法. 你可以看到app的異常行為, 例如在你的app本該空閑的時候出現(xiàn)了大量的電量消耗.
在app運行的時候, 調(diào)試測量儀器和他們的報告提供了一種快捷的視圖. 如果需要更詳細的信息, 每份報告都提供一個方式來啟動Instruments來加載你的app. Instruments的界面重新進行了設(shè)計,界面交互變得更簡單, 更自然. 比如加入了捏合縮放手勢, 讓在數(shù)據(jù)間導(dǎo)航更順暢.
詳情參見: Instruments User Guide.
-
地址消毒劑
Xcode7能夠在編譯應(yīng)用時加入地址消毒劑, 用以幫助捕獲和調(diào)試內(nèi)存沖突. 堆棧緩沖溢出, 野指針等內(nèi)存沖突導(dǎo)致的崩潰Objective-C和C代碼很容易產(chǎn)生. 內(nèi)存問題可能導(dǎo)致app崩潰, 也可能讓app發(fā)生詭異的行為. 由于難以復(fù)現(xiàn), 并且bug現(xiàn)象和源頭可能相距很遠(比如登陸功能有野指針可能導(dǎo)致商品的名稱顯示不正常), 內(nèi)存問題很難追蹤.
在build scheme里面啟用地址消毒劑, 你就可以在發(fā)生問題的時候定位內(nèi)存地址. Xcode同時也會提供諸如地址和對象的關(guān)系, 對象分配和回收的信息, 從而幫助你定位和解決為題. 地址消毒劑的性能很好. 支持模擬器和真實設(shè)備, 支持iOS和 OS X.
測試
Xcode 7里面, XCTest框架加入了一個主打的特性: UI testing. UI testing以XCTest現(xiàn)存的API和概念的一個擴展的方式實現(xiàn), 已經(jīng)熟悉Xcode的測試功能的開發(fā)者很容易上手.
-
UI 錄制
UI test方法可以通過錄制UI交互操作的方式創(chuàng)建. 當(dāng)用戶和應(yīng)用交互的時候, Xcode在你的測試方法里面注入代碼, 這些代碼找到你app的UI元素, 訪問他們的屬性, 調(diào)用他們的事件. -
正確性和性能
XCTest現(xiàn)在為定位UI元素, 訪問元素的屬性, 調(diào)用事件提供了豐富的特性. 在UITest中, assert, 性能監(jiān)視等同樣支持. -
代碼覆蓋率
在scheme里啟用代碼覆蓋率功能, 就可以對代碼覆蓋率進行可視化. 在測試報告里可以看到哪個文件里的哪個函數(shù)的哪行代碼是執(zhí)行了還是沒執(zhí)行.代碼編輯器也可以顯示代碼的覆蓋率信息, 讓你看到在一此測試中哪行代碼執(zhí)行了, 哪行代碼沒執(zhí)行. -
Xcode Server.
Xcode的測試功能已經(jīng)和Xcode Server完整的集成. 在Xcode Server上你在一個hands-off(放手, 類似于騎自行車大撒把)的環(huán)境里, 在多個設(shè)備上執(zhí)行測試, 反復(fù)的執(zhí)行, 統(tǒng)一和更好的評估app的正確性和性能. 新的Xcode Server 報表格式會顯示一個項目中的趨勢, 回歸反復(fù)進行的測試.
詳情參見: Testing with Xcode
免費得設(shè)備調(diào)試
-
在你自己的設(shè)備上開發(fā)
在Xcode7里面, 不再需要購買開發(fā)者以及進行繁瑣的設(shè)置, 你就可以在任意的設(shè)備上進行開發(fā)和調(diào)試了. 只需要注冊一個Apple Id.
崩潰日志
之前的Xcode為iOS和watchOS提供了分析和使用crash數(shù)據(jù)的方法. 現(xiàn)在, Xcode 7里面, OS X app也支持這個功能了.
-
Test Flight.
Test Flight支持 -
崩潰報告
Xcode 7提供了更好的查看和使用崩潰報告的功能.
詳情參見: Analyzing Crash Reports