天天看點

開發者所需要知道的 iOS 11 SDK 新特性

年紀大了過了能熬夜看 wwdc 的時代了,但是還是在小小寶的哭鬧和媽媽大人換尿布的催促中起了個大早。于是算趁着“熱乎”把 wwdc 2017 的 keynote 看完了。和往年差不多,雖然 wwdc 是一個開發者會議,但是 keynote 并不是專門針對我們開發者的,它還承擔了公司狀況說明,新品釋出等功能。作為技術人員,可能接下來的 session 會更有意義。要用一句話來評價今年 keynote 所展現出來的内容的話,就是小步革新。大的技術方面可以說隻有 arkit 可堪研究,但是我們還是看到了類似跨 app 拖拽,新的 files 應用這樣進一步突破 ios 原有桎梏的更新 (imessage 轉賬什麼的就不提了,我大天朝威武,移動支付領域領先世界至少三年)。ios 11,特别是配合新的硬體,相信會給使用者帶來不錯的體驗。

作為 ios 開發者,和往年一樣,我整理了一下在可能需要關注的地方。

新增架構

新加入 sdk 的大的架構有兩個,分别是負責簡化和內建機器學習的 core ml 和用來建立增強現實 (ar) 應用的 arkit。

core ml

自從 alphago 出現以來,深度學習毫無疑問成了行業熱點。而 google 也在去年就轉變 mobile-first 到 ai-first 的戰略。可以說一線的網際網路企業幾乎都在押寶 ai,目前看來機器學習,特别是深度學習是最有希望的一條道路。

如果你不是很熟悉機器學習的話,我想我可以在這裡“僭越”地做一些簡介。你可以先把機器學習的模型看作一個黑盒函數,你給定一些輸入 (可能是一段文字,或者一張圖檔),這個函數會給出特定的輸出 (比如這段文字中的人名地名,或者圖檔中出現的商店名牌等)。一開始這個模型可能非常粗糙,完全不能給出正确的結果,但是你可以使用大量已有的資料和正确的結果,來對模型進行訓練,甚至改進。在所使用的模型足夠優化,以及訓練量足夠大的情況下,這個黑盒模型将不僅對訓練資料有較高的準确率,也往往能對未知的實際輸入給出正确的傳回。這樣的模型就是一個訓練好的可以實際使用的模型。

對機器學習模型的訓練是一項很重的工作,core ml 所扮演的角色更多的是将已經訓練好的模型轉換為 ios 可以了解的形式,并且将新的資料“喂給”模型,擷取輸出。抽象問題和建立模型雖然并不難,但是對模型的改進和訓練可以說是值得研究一輩子的事情,這篇文章的讀者可能也不太會對此感冒。好在 apple 提供了一系列的工具用來将各類機器學習模型轉換為 core ml 可以了解的形式。籍此,你就可以輕松地在你的 ios app 裡使用前人訓練出的模型。這在以前可能會需要你自己去尋找模型,然後寫一些 c++ 的代碼來跨平台調用,而且難以利用 ios 裝置的 gpu 性能和 metal (除非你自己寫一些 shader 來進行矩陣運算)。core ml 将使用模型的門檻降低了很多。

core ml 在背後驅動了 ios 的視覺識别的 vision 架構和 foundation 中的語義分析相關 api。普通開發者可以從這些高層的 api 中直接獲益,比如人臉圖檔或者文字識别等。這部分内容在以前版本的 sdk 中也存在,不過在 ios 11 sdk 中它們被集中到了新的架構中,并将一些更具體和底層的控制開放出來。比如你可以使用 vision 中的高層接口,但是同時指定底層所使用的模型。這給 ios 的計算機視覺帶來了新的可能。

google 或者 samsung 在 android ai 上的努力,大多是在自帶的應用中內建服務。相比起來,apple 基于對自己生态和硬體的控制,将更多的選擇權交給了第三方開發者。

arkit

keynote 上的 ar 的示範可以說是唯一的亮點了。ios sdk 11 中 apple 給開發者,特别是 ar 相關的開發者帶來了一個很棒的禮物,那就是 arkit。ar 可以說并非什麼新技術,像是 pokémon go 這樣的遊戲也驗證了 ar 在遊戲上的潛力。不過除了 ip 和新鮮感之外,個人認為 pokémon go 并沒有資格代表 ar 技術的潛力。現場的示範像我們展示了一種可能,粗略看來,arkit 利用單鏡頭和陀螺儀,在對平面的識别和虛拟物體的穩定上做得相當出色。幾乎可以肯定,那麼不做最早,隻做最好的 apple 似乎在這一刻回到了舞台上

arkit 極大降低了普通開發者玩 ar 的門檻,也是 apple 現階段用來抗衡 vr 的選項。可以暢想一下更多類似 pokémon go 的 ar 遊戲 (結合實境的虛拟寵物什麼的大概是最容易想到的) 能在 arkit 和 scenekit 的幫助下面世,甚至在 ipad pro 現有技能上做像是 ar 電影這樣能全方位展示的多媒體可能也不再是單純的夢想。

而與之相應的,是一套并不很複雜的 api。涉及的 view 幾乎是作為 scenekit 的延伸,再加上在真實世界的定為也已經由系統幫助處理,開發者需要做的大抵就是将虛拟物體放在螢幕的合适位置,并讓物體之間互動。而利用 core ml 來對相機内的實際物體進行識别和互動,可以說也讓各類特效的相機或者攝影 app 充滿了想像空間。

xcode

編輯器和編譯器

速度就是生命,而開發者的生命都浪費在了等待編譯上。swift 自問世以來就備受好評,但是緩慢的編譯速度,時有時無的文法提示,無法進行重構等工具鍊上的欠缺成為了最重要的黑點。xcode 9 中編輯器進行了重寫,支援了對 swift 代碼的重構 (雖然還很基礎),将 vcs 提到了更重要的位置,并添加了 github 內建,可以進行同區域網路的無線部署和調試。