引用地址: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)試急侥。
新的編譯系統(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è)顏色了。大概是這樣的:
像是使用 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é)果。
UITextView
和UITextField
原生支持拖拽印蔗,UICollectionView
和UITableView
的拖拽有一系列專用的 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中添加了
username
和password
挪挤,對(duì)適合的 text view 或者 text field 的 content type 進(jìn)行配置叼丑,就可以在要求輸入用戶名密碼時(shí)獲取鍵盤(pán)上方的自動(dòng)填充,幫助用戶快速登錄扛门。