WWDC總結:開發者須要知道的iOS 9 SDK新特性

http://blog.csdn.net/uxyheaven/article/details/46470801算法

編者按:WWDC 2015蘋果開發者大會是移動開發者一年一度的盛會,InfoQ中文站除了第一時間整理Keynote內容分享給你們以外,還邀請了資深的一線開發者分享他們的收穫。本文爲王巍(@onevcat)對WWDC上透露的iOS 9 SDK新特性的總結,分享給廣大的iOS開發者。後端

年年歲歲花類似,歲歲年年人不一樣。今年的 WWDC 一如既往的熱鬧,得益於 Apple 的隨機抽選機制,這兩年有更多的中國開發者有機會親臨現場進行體驗,並與全球開發者取得更多的交流。更多的開發者可能只能在家裏或者公司遠程關注這一全球 Apple 開發者的盛會,可是這也並無減小你們對於開發的熱情。安全

生命不息,學習不止。從 WWDC 開始受到廣大開發者的關注以來,這就是一個開發者們學習和提升的重要途徑。能夠感覺到近年來國內開發者的平均水平愈來愈高,但願這樣的趨勢可以保持下去,畢竟只有在社區的支持下,開發者們纔會是最強力的存在。架構

事不宜遲,讓咱們來看看今年的 WWDC 中開發者可能須要重點關注的一些內容吧。app

總覽框架

iOS 9 時代開發者面臨的最大的挑戰和最急切的任務可能有兩個方面,首先是如何利用和適配全新的 iPad 分屏多任務特性,其次是如何面對和利用 watchOS 2 來構建原生的手錶 app。另外的新課題基本就都是現有框架的衍生和擴展,包括從單元測試擴展到 UI 測試,如何進一步佔領和使用系統的通知中心及搜索頁面,以及 Swift 2 的使用等。異步

能夠說,通過了 iOS 7 和 iOS 8 連續兩次重量級的變革和更新,對普通的 app 開發者來講,iOS 9 SDK 略歸於緩和及平靜,新的 SDK 在 API 和總體設計上並無發生像以前兩個系統那樣翻天覆地的改變。開發者們也正能夠利用這個機會稍做喘息,在這一年裏儘快熟悉和至少過渡到使用 iOS 8 SDK 的特性來構築本身的 app (好比嘗試使用 Size Class 和 Presentation Controller 等)。儘可能提高本身的職業能力和製做 app 的水平,並保證能跟上滾滾向前的 Apple 車輪,應該是今年 Cocoa 開發者們的主要任務。從近幾年的 WWDC 技術路線圖來看,Apple 開發可謂是環環相扣,若是哪一年你的技術停步不前,以後想要再遇上可能要付出的就是成倍的精力了。ide

Multitasking工具

這能夠說是 iOS 9 最大的賣點了。多任務特性,特別是分屏多任務使得 iPad 真正變得像一個堪當重任的我的電腦。雖然在很早之前就已經有越獄插件能讓 iPad 同時運行多個程序,可是 Apple 仍是很謹慎地到 2015 年纔在本身性能最爲強勁的移動設備上實裝這個功能。iOS 9 中的多任務分爲三種表現形式,分別是臨時調出的滑動覆蓋 (Slide Over),視頻播放的畫中畫模式 (Picture in Picture) 以及真正的同時使用兩個 app 的分割視圖 (Split View)。如今能運行 iOS 9 的設備中只有最新的 iPad Air 2 支持分割視圖方式,可是相信隨着設備的更新,分割視圖的使用方式極可能成爲人們平常使用 iPad 的一種主流方式,所以提前進行準備是開發者們的必修功課。佈局

雖然第一眼看上去感受要支持多任務的視圖會是一件很是複雜的事情,可是實際上若是你在前一年就緊跟 Apple 步伐的話,就很簡單了。滑動覆蓋和分割視圖的 app 會使用 iOS 8 引入的 Size Class 中的 Compact Width 和 Regular Height 的設定,配合上 AutoLayout 來進行佈局。也就是說,若是你的 app 以前就是 iPhone 和 iPad 通用的,而且已經使用了 Size Class 進行佈局的話,基本上你不須要再額外作什麼事兒就已經能支持 iOS 9 的多任務視圖了。可是若是不幸你尚未使用這些技術的話,可能你會須要儘快遷移到這套佈局方式中,才能完美支持了。

視頻 app 的畫中畫模式相對簡單一些,若是你使用 AVPlayerViewController 或者 AVPlayerLayer 來播放視頻的話,那什麼都不用作就已經支持了。但若是你以前選擇的方案是 MPMoviePlayerController 或者 MPMoviePlayerViewController 的話,你可能也須要今早遷移到 AVKit 的框架下來,由於 Media Player 將在 iOS 9 被標記爲 deprecated 並再也不繼續維護。

watchOS 2

在新的 watchOS 2 中,Watch App 的架構發生了巨大改變。新系統中 Watch App 的 extension 將不像如今這樣存在於 iPhone 中,而是會直接安裝到手錶裏去,Apple Watch 從一個單純的界面顯示器進化爲了可執行開發者代碼的設備。得益於此,開發者們也能夠在 extension 中訪問到像數字表冠和 (雖然都只是很初級的訪問,可是聊勝於無) 心跳計數這樣的情報。雖然有所進步,可是其實 Apple 在 watchOS 2 裏表現出來的態度仍是十分謹慎,這可能和初代 Apple Watch 的設備限制有很大關係,因此實際上留給 app 開發者的電量和性能空間並非十分廣闊。可是相比起如今的 WatchKit 來講,能夠脫離 iPhone 運行自己就是了不得的進步了。而爲了和 iPhone 進行通信,如今還添加了 WatchConnectivity 這個新框架。咱們有足夠的理由期待 Apple Watch 和 WatchKit 在接下來兩三年裏的表現。

UI Test

在開發領域裏,測試一直是保障產品質量關鍵。從 Xcode 4 以來,測試在 app 開發中的地位可謂是逐年上升。從 XCT 框架的引入,到測試 target 成爲新建項目時的默認,再到去年加入的異步代碼測試和性能測試。能夠說如今 Xcode 自帶的測試框架已經能知足絕大部分單元測試的需求了。

可是這並不夠。開發一個 iOS app 歷來都是更注重 UI 和用戶體驗的工做,而簡單地單元測試能夠很容易地保證 model 層的正確,卻很難在 UI 方面有所做爲。如何爲一個 app 編寫 UI 測試一直是 Cocoa 社區的難題之一。以前的話有像是 KIF,Automating,甚至是 FBSnapshotTestCase 這種腦洞大開的方案。今年 Apple 給出了一個更加誘人的選項,那就是 Xcode 自帶的 XCUITest 的一系列工具。

和大部分已有的 UI 測試工具相似,XCUI 使用 Accessibility 標記來肯定 view,但由於是 Apple 自家的東西,它能夠自動記錄你的操做流程,因此你只須要書寫最後的驗證部分就能夠了,比其餘的 UI 測試工具方便不少。

Swift 2

Swift 通過了一年的改善和進步,如今已經能夠很好地擔任 app 開發的工做了。筆者本身也已經使用 Swift 做爲平常工做的主要語言有半年多時間了,這半年裏的整體感受是越寫越舒暢。Swift 2 裏主要的改動是錯誤處理方面的變化,Apple 從 Cocoa 傳統的基於 NSError 錯誤處理方式變爲了 throw catch 的異常處理機制。這個轉變確實可讓程序更加安全,新增的 ErrorType 也很好地將錯誤描述進行了統一。可是在實際接觸了一兩天以後,在語法上感受要比原來的處理寫的代碼多一些。多是長久以來使用 NSError 的習慣致使吧,筆者還並無能很好地全面接受 Swift 2 中的異常機制。不過此次 Apple 作的相對激進,把 Cocoa API 中的 error 全數替換成了 throw。因此無論情不情願,轉型到異常處理是 Swift 開發者必須面對的了。

另外 Apple 新加了一些像是 guard 和 defer 這樣的控制流關鍵字,這在其餘一些語言裏也是很實用的特性,這讓 Swift 的書寫更加簡化,閱讀起來更流暢。爲了解決在運行時的不一樣 SDK 的可用性的問題,Apple 還在 Swift 2 里加入了 avaliable 塊,之前咱們須要本身去記憶 API 的可用性,並經過檢查系統版本並進行對比來作這件事情。如今有了 avaliable 檢測,編譯器將會檢查出那些可能出現版本不匹配的 API 調用,app 開發的安全性獲得了進一步的保障。爲了讓整個 SDK 更適合 Swift 的語法習慣,Apple 終於在 Objective-C 中引入了泛型。這看似是 Objective-C 的增強,可是實際上卻實實在在地是爲 Swift 一統 Apple 開發開路。有了 Objective-C 泛型之後,用 Swift 訪問 Cocoa API 基本不會再獲得 AnyObject 類型了,這使得 Swift 的安全特性又上了一層臺階。

最後是 Swift 2 開源的消息。Swift 的編譯器和標準庫將在今年年末開源,對於通常的 app 開發者來講可能並不會帶來什麼鉅變,但這確實意味着 Swift 將從一門 app 製做的專用語言轉型爲一門通用語言。最容易想到的就是基於 Swift 的後端開發,也許咱們會在看到 Javascript 一統天下以前就能先感覺一下 Swift 全棧的力量?

App Thinning

筆者在日本工做,由於這邊你們流量都是包月且溢出的,因此基本不會有人對 app 的尺寸介意,無非就是下載 5 秒仍是 10 秒的區別。可是在和國內同行交流的時候,發現國內 app 開發對尺寸的要求近乎苛刻。由於 iOS app 爲了後向兼容,如今都同時包含了 32 bit 和 64 bit 兩個 slice。另外在圖片資源方面,更是 1x 2x 3x 的圖像包羅萬象 (好吧如今 1x 應該不太須要了)。而用戶使用 app 時,由於設備是特定的,其實只須要其中的一套資源。可是如今在購買和下載的時候倒是把整個 app 包都下載了。

Apple 終於意識到了這件事情有多傻,iOS 9 中終於能夠僅選擇須要的內容 (Slicing) 下載了。這對用戶來講是很大的利好,由於只須要升級到 iOS 9,就能夠節省不少流量。對於開發者來講,並無太多要作的事情,只須要使用 asset catalog 來管理素材標記 2x 3x 就能夠了。

給 App 瘦身的另外一個手段是提交 Bitcode 給 Apple,而不是最終的二進制。Bitcode 是 LLVM 的中間碼,在編譯器更新時,Apple 能夠用你以前提交的 Bitcode 進行優化,這樣你就沒必要在編譯器更新後再次提交你的 app,也能享受到編譯器改進所帶來的好處。Bitcode 支持在新項目中是默認開啓的,沒有特別理由的話,你也不須要將它特地關掉。

最後就是按需加載的資源。這可能在遊戲中應用場景會多一些。你能夠用 tag 來組織像圖像或者聲音這樣的資源,好比把它們標記爲 level1,level2 這樣。而後一開始只須要下載 level1 的內容,在玩的過程當中再去下載 level2。或者也能夠經過這個來推後下載那些須要內購才能得到的資源文件。在一些大型遊戲裏這是很常見的優化方法,如今在 iOS 9 裏也能夠方便地使用了。

人工智能和搜索 API

若是說這屆 WWDC Keynote 上還有什麼留給我印象深入的內容的話,我會給更加智能的手機助理投上一票。雖然看起來還很初級,好比就是插入耳機時播放你喜歡的音樂,推薦你可能會聯繫的 人和打開的 app 等,可是這確實是頗有意義的一步。如今的 Siri 只是一個問答系統,若是上下文中斷,「她」甚至不記得前面兩句話說了些什麼。一個不會記住 Boss 習慣的祕書必定不是一個好護士,而 Apple 正在讓 iPhone 向這方面努力。好消息是咱們大概暫時還不用擔憂會碰到故意不經過圖靈測試的機器,因此在人工智能上還有很大的空間能夠發揮。

而搜索 API 實質上讓 app 多了一個可能的入口。有些用戶會很是頻繁地使用搜索界面,這是一個絕好的展現你的 app 和提升打開率的機會。若是 app 類型合適的話,這是很是值得一作的追加特性。

遊戲相關

遊戲類的 app 由於在不一樣的移動平臺上的用戶體驗並無鴻溝似的差別,因此是最容易跨平臺的 - 畢竟如今不管哪一個開發商都沒法忽視安卓的份額。這也是 Apple 自家的 SpriteKit 和 SceneKit 這樣的遊戲框架一直不溫不火的緣由。比起被侷限在 Apple 平臺,更多的開發商選擇像是 Unity 或者 Cocos2d-x 這樣的跨平臺方案。可是今年 Apple 仍是持續增強了遊戲方面的開發工具支持,包括負責狀態機維護和尋路等的 GameplayKit 框架,負責錄像和回放遊戲過程的 ReplayKit 框架,以及物理建模的 Model I/O 框架。

這些其實都是在 Apple 的遊戲開發體系中補充了一些遊戲業界已經很成熟的算法和工具,爲開發者節省了很多時間。對於我的開發者自制的遊戲來講,Apple 的工具提供了相對低的門檻,易於上手。可是在如今大部分遊戲開發都須要跨平臺的年代,總感受 Apple 體系是否能順利走下去還須要進一步觀察。

其它

HomeKit,CloudKit,HealthKit 等等雜七雜八的框架。若是是 iOS Only 的 app 的話,使用 CloudKit 作 BaaS 也許是不錯的選擇,可是也要面臨從此跨平臺數據難以共享的風險。其餘幾個框架專業性相對較強,大部分須要配合硬件支援,其實一直說智能硬件是下一個爆點, 可是至少如今爲止還沒能爆出大的聲響,更多的卻已經進入到廉價競爭 (手環什麼的你懂的),只能說期待這些設備的後續表現吧。

最後是一個對於剛入門或者打算投身到 Apple 開發中的朋友的福利。如今你能夠不須要加入付費的開發者計劃就能將 app 部署到本身的設備上了,而在之前這至少須要你加入 99 美金每一年的開發者計劃,這能夠說進一步下降了進行 Apple 開發的門檻。

總結

正如上面提到的,對開發者來講,今年的 WWDC 並無像 13 年和 14 年那樣顛覆性的變化,大可能是對已有特性的增強補充和對開發工具鏈的加強。今年能夠說是一個 Cocoa 開發者們沉澱以前知識,增進本身技能的好機會。如今 WWDC 15 還在如火如荼的進行之中。若是你打算儘早擁抱新 SDK 的變化的話,請不要猶豫,直接訪問 Apple 的開發者網站,去尋找和觀看本身感興趣的話題吧。

相關文章
相關標籤/搜索