(轉(zhuǎn)載)開(kāi)發(fā)者所需要知道的 iOS 11 SDK 新特性

引用地址:http://blog.csdn.net/ziyuzhiye/article/details/72899664

年紀(jì)大了過(guò)了能熬夜看 WWDC 的時(shí)代了复隆,但是還是在小小寶的哭鬧和媽媽大人換尿布的催促中起了個(gè)大早澡腾。于是算趁著“熱乎”把 WWDC 2017 的 Keynote 看完了小染。和往年差不多钮呀,雖然 WWDC 是一個(gè)開(kāi)發(fā)者會(huì)議删掀,但是 Keynote 并不是專門(mén)針對(duì)我們開(kāi)發(fā)者的患膛,它還承擔(dān)了公司狀況說(shuō)明,新品發(fā)布等功能人断。作為技術(shù)人員吭从,可能接下來(lái)的 session 會(huì)更有意義。要用一句話來(lái)評(píng)價(jià)今年 Keynote 所展現(xiàn)出來(lái)的內(nèi)容的話恶迈,就是小步革新影锈。大的技術(shù)方面可以說(shuō)只有 ARKit 可堪研究,但是我們還是看到了類似跨 app 拖拽蝉绷,新的 Files 應(yīng)用這樣進(jìn)一步突破 iOS 原有桎梏的更新 (iMessage 轉(zhuǎn)賬什么的就不提了,我大天朝威武枣抱,移動(dòng)支付領(lǐng)域領(lǐng)先世界至少三年)熔吗。iOS 11,特別是配合新的硬件佳晶,相信會(huì)給用戶帶來(lái)不錯(cuò)的體驗(yàn)桅狠。

作為 iOS 開(kāi)發(fā)者,和往年一樣轿秧,我整理了一下在可能需要關(guān)注的地方中跌。

新增框架

新加入 SDK 的大的框架有兩個(gè),分別是負(fù)責(zé)簡(jiǎn)化和集成機(jī)器學(xué)習(xí)的 Core ML 和用來(lái)創(chuàng)建增強(qiáng)現(xiàn)實(shí) (AR) 應(yīng)用的 ARKit菇篡。

Core ML

自從 AlphaGo 出現(xiàn)以來(lái)漩符,深度學(xué)習(xí)毫無(wú)疑問(wèn)成了行業(yè)熱點(diǎn)。而 Google 也在去年就轉(zhuǎn)變 Mobile-first 到 AI-first 的戰(zhàn)略驱还∈缺可以說(shuō)一線的互聯(lián)網(wǎng)企業(yè)幾乎都在押寶 AI凸克,目前看來(lái)機(jī)器學(xué)習(xí),特別是深度學(xué)習(xí)是最有希望的一條道路闷沥。

如果你不是很熟悉機(jī)器學(xué)習(xí)的話萎战,我想我可以在這里“僭越”地做一些簡(jiǎn)介。你可以先把機(jī)器學(xué)習(xí)的模型看作一個(gè)黑盒函數(shù)舆逃,你給定一些輸入 (可能是一段文字蚂维,或者一張圖片),這個(gè)函數(shù)會(huì)給出特定的輸出 (比如這段文字中的人名地名路狮,或者圖片中出現(xiàn)的商店名牌等)虫啥。一開(kāi)始這個(gè)模型可能非常粗糙,完全不能給出正確的結(jié)果览祖,但是你可以使用大量已有的數(shù)據(jù)和正確的結(jié)果孝鹊,來(lái)對(duì)模型進(jìn)行訓(xùn)練,甚至改進(jìn)展蒂。在所使用的模型足夠優(yōu)化又活,以及訓(xùn)練量足夠大的情況下,這個(gè)黑盒模型將不僅對(duì)訓(xùn)練數(shù)據(jù)有較高的準(zhǔn)確率锰悼,也往往能對(duì)未知的實(shí)際輸入給出正確的返回柳骄。這樣的模型就是一個(gè)訓(xùn)練好的可以實(shí)際使用的模型。

對(duì)機(jī)器學(xué)習(xí)模型的訓(xùn)練是一項(xiàng)很重的工作箕般,Core ML 所扮演的角色更多的是將已經(jīng)訓(xùn)練好的模型轉(zhuǎn)換為 iOS 可以理解的形式耐薯,并且將新的數(shù)據(jù)“喂給”模型,獲取輸出丝里。抽象問(wèn)題和創(chuàng)建模型雖然并不難曲初,但是對(duì)模型的改進(jìn)和訓(xùn)練可以說(shuō)是值得研究一輩子的事情,這篇文章的讀者可能也不太會(huì)對(duì)此感冒杯聚。好在 Apple 提供了一系列的工具用來(lái)將各類機(jī)器學(xué)習(xí)模型轉(zhuǎn)換為 Core ML 可以理解的形式臼婆。籍此,你就可以輕松地在你的 iOS app 里使用前人訓(xùn)練出的模型幌绍。這在以前可能會(huì)需要你自己去尋找模型颁褂,然后寫(xiě)一些 C++ 的代碼來(lái)跨平臺(tái)調(diào)用,而且難以利用 iOS 設(shè)備的 GPU 性能和 Metal (除非你自己寫(xiě)一些 shader 來(lái)進(jìn)行矩陣運(yùn)算)傀广。Core ML 將使用模型的門(mén)檻降低了很多颁独。

Core ML 在背后驅(qū)動(dòng)了 iOS 的視覺(jué)識(shí)別的 Vision 框架和 Foundation 中的語(yǔ)義分析相關(guān) API。普通開(kāi)發(fā)者可以從這些高層的 API 中直接獲益伪冰,比如人臉圖片或者文字識(shí)別等誓酒。這部分內(nèi)容在以前版本的 SDK 中也存在,不過(guò)在 iOS 11 SDK 中它們被集中到了新的框架中糜值,并將一些更具體和底層的控制開(kāi)放出來(lái)丰捷。比如你可以使用 Vision 中的高層接口坯墨,但是同時(shí)指定底層所使用的模型。這給 iOS 的計(jì)算機(jī)視覺(jué)帶來(lái)了新的可能病往。

Google 或者 Samsung 在 Android AI 上的努力捣染,大多是在自帶的應(yīng)用中集成服務(wù)。相比起來(lái)停巷,Apple 基于對(duì)自己生態(tài)和硬件的控制耍攘,將更多的選擇權(quán)交給了第三方開(kāi)發(fā)者。

ARKit

Keynote 上的 AR 的演示可以說(shuō)是唯一的亮點(diǎn)了畔勤。iOS SDK 11 中 Apple 給開(kāi)發(fā)者蕾各,特別是 AR 相關(guān)的開(kāi)發(fā)者帶來(lái)了一個(gè)很棒的禮物,那就是 ARKit庆揪。AR 可以說(shuō)并非什么新技術(shù)式曲,像是 Pokémon Go 這樣的游戲也驗(yàn)證了 AR 在游戲上的潛力。不過(guò)除了 IP 和新鮮感之外缸榛,個(gè)人認(rèn)為 Pokémon Go 并沒(méi)有資格代表 AR 技術(shù)的潛力×咝撸現(xiàn)場(chǎng)的演示像我們展示了一種可能,粗略看來(lái)内颗,ARKit 利用單鏡頭和陀螺儀钧排,在對(duì)平面的識(shí)別和虛擬物體的穩(wěn)定上做得相當(dāng)出色。幾乎可以肯定均澳,那么不做最早恨溜,只做最好的 Apple 似乎在這一刻回到了舞臺(tái)上

ARKit 極大降低了普通開(kāi)發(fā)者玩 AR 的門(mén)檻,也是 Apple 現(xiàn)階段用來(lái)抗衡 VR 的選項(xiàng)找前≡阍可以暢想一下更多類似 Pokémon Go 的 AR 游戲 (結(jié)合實(shí)境的虛擬寵物什么的大概是最容易想到的) 能在 ARKit 和 SceneKit 的幫助下面世,甚至在 iPad Pro 現(xiàn)有技能上做像是 AR 電影這樣能全方位展示的多媒體可能也不再是單純的夢(mèng)想躺盛。

而與之相應(yīng)的系吭,是一套并不很復(fù)雜的 API。涉及的 View 幾乎是作為 SceneKit 的延伸颗品,再加上在真實(shí)世界的定為也已經(jīng)由系統(tǒng)幫助處理,開(kāi)發(fā)者需要做的大抵就是將虛擬物體放在屏幕的合適位置沃缘,并讓物體之間互動(dòng)躯枢。而利用 Core ML 來(lái)對(duì)相機(jī)內(nèi)的實(shí)際物體進(jìn)行識(shí)別和交互,可以說(shuō)也讓各類特效的相機(jī)或者攝影 app 充滿了想像空間槐臀。

Xcode

編輯器和編譯器

速度就是生命锄蹂,而開(kāi)發(fā)者的生命都浪費(fèi)在了等待編譯上。Swift 自問(wèn)世以來(lái)就備受好評(píng)水慨,但是緩慢的編譯速度得糜,時(shí)有時(shí)無(wú)的語(yǔ)法提示敬扛,無(wú)法進(jìn)行重構(gòu)等工具鏈上的欠缺成為了最重要的黑點(diǎn)。Xcode 9 中編輯器進(jìn)行了重寫(xiě)朝抖,支持了對(duì) Swift 代碼的重構(gòu) (雖然還很基礎(chǔ))啥箭,將 VCS 提到了更重要的位置,并添加了 GitHub 集成治宣,可以進(jìn)行同局域網(wǎng)的無(wú)線部署和調(diào)試急侥。

image

新的編譯系統(tǒng)是使用 Swift 重寫(xiě)的,在進(jìn)行了一些對(duì)比以后侮邀,編譯速度確實(shí)有了不小的提升坏怪。雖然不知道是不是由于換成了 Swift 4,不過(guò)正在做的公司項(xiàng)目的總編譯時(shí)間從原來(lái)的三分半縮短到了兩分鐘半左右绊茧,可以說(shuō)相當(dāng)明顯了铝宵。

Xcode 9 中的索引系統(tǒng)也使用了新的引擎,據(jù)稱在大型項(xiàng)目中搜索最高可以達(dá)到 50 倍的速度华畏。不過(guò)可能由于筆者所參加的項(xiàng)目不夠大鹏秋,這一點(diǎn)體會(huì)不太明顯。項(xiàng)目里的 Swift 代碼依然面臨失色的情況唯绍。這可能是索引系統(tǒng)和編譯系統(tǒng)沒(méi)有能很好協(xié)同造成的拼岳,畢竟還是 beta 版本的軟件,也許應(yīng)該多給 Xcode 團(tuán)隊(duì)一些時(shí)間 (雖然可能到最后也就這樣了)况芒。

由于 Swift 4 編譯器也提供了 Swift 3 的兼容 (在 Build Setting 中設(shè)置 Swift 版本即可)惜纸,所以如果沒(méi)有什么意外的話,我可能會(huì)在之后的日常開(kāi)發(fā)中使用 Xcode 9 beta绝骚,然后在打包和發(fā)布時(shí)再切回 Xcode 8 了耐版。畢竟每次完整編譯節(jié)省一分半鐘的時(shí)間,還是一件很誘人的事情压汪。

這次的 beta 版本質(zhì)量出人意料地好粪牲,也許是因?yàn)檫@一兩年來(lái)都是小幅革新式的改良,讓 Apple 的軟件團(tuán)隊(duì)有相對(duì)充足的時(shí)間進(jìn)行開(kāi)發(fā)的結(jié)果止剖?總之腺阳,Xcode 9 beta 現(xiàn)在已經(jīng)能很好地工作了。

Named Color

這是個(gè)人很喜歡的一個(gè)變化〈┫悖現(xiàn)在你可以在 xcassets 里添加顏色亭引,然后在代碼或者 IB 中引用這個(gè)顏色了。大概是這樣的:

image

像是使用 IB 來(lái)構(gòu)建 UI 的時(shí)候皮获,一個(gè)很頭疼的事情就是設(shè)計(jì)師表示我們要不換個(gè)主題色焙蚓。你很可能需要到處尋找這個(gè)顏色進(jìn)行替換。但是現(xiàn)在你只需要在 xcassets 里改一下,就能反應(yīng)到 IB 中的所有地方了购公。

其他值得注意的變更

剩下的都是些小變化了萌京,簡(jiǎn)單瀏覽了下,把我覺(jué)得值得一提的列舉出來(lái)宏浩,并附上參考的鏈接知残。

  • 拖拽 - 很標(biāo)準(zhǔn)的一套 iOS API,不出意外地绘闷,iOS 系統(tǒng)幫助我們處理了絕大部分工作橡庞,開(kāi)發(fā)者幾乎只需要處理結(jié)果。UITextViewUITextField 原生支持拖拽印蔗,UICollectionViewUITableView 的拖拽有一系列專用的 delegate 來(lái)表明拖拽的發(fā)生和結(jié)束扒最。而你也可以對(duì)任意 UIView 子類定義拖拽行為。和 mac 上的拖拽不同华嘹,iOS 的拖拽充分尊重了多點(diǎn)觸控的屏幕吧趣,所以可能你需要對(duì)一次多個(gè)的拖拽行為做些特別處理。
  • FileProvider 和 FileProviderUI - 提供一套類似 Files app 的界面耙厚,讓你可以獲取用戶設(shè)備上或者云端的文件强挫。相信會(huì)成為以后文檔相關(guān)類 app 的標(biāo)配。
  • 不再支持 32 位 app - 雖然在 beta 1 中依然可以運(yùn)行 32 位 app薛躬,但是 Apple 明確指出了將在后續(xù)的 iOS 11 beta 中取消支持俯渤。所以如果你想讓自己的程序運(yùn)行在 iOS 11 的設(shè)備上,進(jìn)行 64 位的重新編譯是必須步驟型宝。
  • DeviceCheck - 每天要用廣告 ID 追蹤用戶的開(kāi)發(fā)者現(xiàn)在有了更好地選擇 (當(dāng)然前提是用來(lái)做正經(jīng)事兒)八匠。DeviceCheck 允許你通過(guò)你的服務(wù)器與 Apple 服務(wù)器通訊,并為單個(gè)設(shè)備設(shè)置兩個(gè) bit 的數(shù)據(jù)趴酣。簡(jiǎn)單說(shuō)梨树,你在設(shè)備上用 DeviceCheck API 生成一個(gè) token,然后將這個(gè) token 發(fā)給自己的服務(wù)器岖寞,再由自己的服務(wù)器與 Apple 的 API 進(jìn)行通訊抡四,來(lái)更新或者查詢?cè)撛O(shè)備的值。這兩個(gè) bit 的數(shù)據(jù)用來(lái)追蹤用戶比如是否已經(jīng)領(lǐng)取獎(jiǎng)勵(lì)這類信息仗谆。
  • PDFKit - 這是一個(gè)在 macOS 上已經(jīng)長(zhǎng)期存在的框架指巡,但卻在 iOS 上姍姍來(lái)遲。你可以使用這個(gè)框架顯示和操作 pdf 文件隶垮。
  • IdentityLookup - 可以自己開(kāi)發(fā)一個(gè) app extension 來(lái)攔截系統(tǒng) SMS 和 MMS 的信息厌处。系統(tǒng)的信息 app 在接到未知的人的短信時(shí),會(huì)詢問(wèn)所有開(kāi)啟的過(guò)濾擴(kuò)展岁疼,如果擴(kuò)展表示該消息應(yīng)當(dāng)被攔截,那么這則信息將不會(huì)傳遞給你。擴(kuò)展有機(jī)會(huì)訪問(wèn)到事先指定的 server 來(lái)進(jìn)行判斷 (所以說(shuō)你可以光明正大地獲取用戶短信內(nèi)容了捷绒,不過(guò)當(dāng)然考慮到隱私瑰排,這些訪問(wèn)都是匿名加密的,Apple 也禁止這類擴(kuò)展在 container 里進(jìn)行寫(xiě)入)暖侨。
  • Core NFC - 在 iPhone 7 和 iPhone 7 Plus 上提供基礎(chǔ)的近場(chǎng)通訊讀取功能椭住。看起來(lái)很 promising字逗,只要你有合適的 NFC 標(biāo)簽京郑,手機(jī)就可以進(jìn)行讀取。但是考慮到無(wú)法后臺(tái)常駐葫掉,實(shí)用性就打了折扣些举。不過(guò)筆者不是很熟這塊,也許能有更合適的場(chǎng)景也未可知俭厚。
  • Auto Fill - 從 iCloud Keychain 中獲取密碼户魏,然后自動(dòng)填充的功能現(xiàn)在開(kāi)放給第三方開(kāi)發(fā)者了。UITextInputTraits 的 textContentType中添加了 usernamepassword挪挤,對(duì)適合的 text view 或者 text field 的 content type 進(jìn)行配置叼丑,就可以在要求輸入用戶名密碼時(shí)獲取鍵盤(pán)上方的自動(dòng)填充,幫助用戶快速登錄扛门。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸠信,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子论寨,更是在濱河造成了極大的恐慌星立,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件政基,死亡現(xiàn)場(chǎng)離奇詭異贞铣,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)沮明,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)辕坝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人荐健,你說(shuō)我怎么就攤上這事跨细。” “怎么了贡蓖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵嘲碱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我址否,道長(zhǎng)餐蔬,這世上最難降的妖魔是什么碎紊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮樊诺,結(jié)果婚禮上仗考,老公的妹妹穿的比我還像新娘。我一直安慰自己词爬,他們只是感情好秃嗜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著顿膨,像睡著了一般锅锨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恋沃,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天必搞,我揣著相機(jī)與錄音,去河邊找鬼芽唇。 笑死顾画,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匆笤。 我是一名探鬼主播研侣,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼炮捧!你這毒婦竟也來(lái)了庶诡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咆课,失蹤者是張志新(化名)和其女友劉穎末誓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體书蚪,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喇澡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了殊校。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晴玖。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖为流,靈堂內(nèi)的尸體忽然破棺而出呕屎,到底是詐尸還是另有隱情,我是刑警寧澤敬察,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布秀睛,位于F島的核電站,受9級(jí)特大地震影響莲祸,放射性物質(zhì)發(fā)生泄漏蹂安。R本人自食惡果不足惜椭迎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望田盈。 院中可真熱鬧侠碧,春花似錦、人聲如沸缠黍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瓷式。三九已至,卻和暖如春语泽,著一層夾襖步出監(jiān)牢的瞬間贸典,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工踱卵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留廊驼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓惋砂,卻偏偏與公主長(zhǎng)得像妒挎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子西饵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容