App開(kāi)發(fā)團(tuán)隊(duì)必須知道的 iOS 11 更新點(diǎn)
WWDC 2017 已經(jīng)過(guò)去差不多一個(gè)季度了,最近隨著 Xcode 9 正式版以及 iPhone 8、iPhone X 的發(fā)布,iOS 11 的全面適配也被提上了日程。我整理了一下更新點(diǎn),包括開(kāi)發(fā)、設(shè)計(jì)、產(chǎn)品甚至是市場(chǎng)都應(yīng)該注意的點(diǎn),分享出來(lái)希望對(duì)大家有所幫助。
新增框架
ARKit
iOS 11 引入了新的 ARKit 框架,讓您輕松創(chuàng)建無(wú)可比擬的 iPhone 和 iPad 增強(qiáng)現(xiàn)實(shí)體驗(yàn)。 通過(guò)將數(shù)字對(duì)象和信息與您周圍的環(huán)境相融合,ARKit 為 App 解開(kāi)了屏幕之縛,帶領(lǐng)著它們跨越屏幕的界限,讓它們以全新的方式與現(xiàn)實(shí)世界交流互動(dòng)。
通過(guò)攝像頭看到虛擬物體在現(xiàn)實(shí)場(chǎng)景上的疊加
ARKit 框架提供了兩種 AR 技術(shù),一種是基于3D場(chǎng)景(SceneKit)實(shí)現(xiàn)的增強(qiáng)現(xiàn)實(shí),一種是基于2D場(chǎng)景(SpriteKit)實(shí)現(xiàn)的增強(qiáng)現(xiàn)實(shí)。
要想顯示 AR 效果,必須要依賴于蘋(píng)果的游戲引擎框架(3D引擎 SceneKit,2D引擎 SpriteKit),主要原因是游戲引擎才可以加載物體模型。
雖然ARKit框架中視圖對(duì)象繼承于 UIView,但是由于目前 ARKit 框架本身只包含相機(jī)追蹤,不能直接加載物體模型,所以只能依賴于游戲引擎加載 ARKit。
另外需要說(shuō)明的一點(diǎn)是,ARKit 雖然是 iOS11 新出的框架,但并不是所有的 iOS11 系統(tǒng)都可以使用,而是必須要是處理器 A9 及以上才能夠使用,蘋(píng)果從 iPhone 6S 開(kāi)始使用 A9 處理器,也就是 iPhone 6 及以前的機(jī)型無(wú)法使用 ARKit。
可用性
沒(méi)有 ARKit 當(dāng)然也可以做 AR,Pokémon Go 就是最好的例證。ARKit 只是降低了做 AR 的門(mén)檻。
ARKit 的使用場(chǎng)景比較局限,必須 iOS 11 系統(tǒng),而且處理器必須是 A9 及以上。如果你需要長(zhǎng)時(shí)間大量支持 iOS 8、9、10 的系統(tǒng),以及 iPhone 6S 之前的系統(tǒng),你可能需要重新考慮你的 AR 方案了。
由于要涉及蘋(píng)果的游戲引擎框架(3D 引擎 SceneKit,2D引擎 SpriteKit),學(xué)習(xí)曲線較為陡峭,需要開(kāi)發(fā)進(jìn)行長(zhǎng)時(shí)間的知識(shí)儲(chǔ)備。
如果僅僅針對(duì)某些推廣活動(dòng)而使用 ARKit,由于推廣活動(dòng)的時(shí)效短,ARKit 的學(xué)習(xí)成本大,總體上性價(jià)比較低,不推薦。
如果整個(gè) App 是基于 AR 的服務(wù)功能,那么這將會(huì)是一個(gè)不錯(cuò)的 idea,例如基于攝像頭的“大眾點(diǎn)評(píng)”,我們可以直接通過(guò)攝像頭展示的現(xiàn)實(shí)世界,疊加一些信息顯示商家的評(píng)分和地理位置。
對(duì)于跨平臺(tái)的游戲而言,由于兼容性問(wèn)題,ARKit 也不是一個(gè)很好的解決方案。如果只涉及蘋(píng)果平臺(tái),并且你已經(jīng)使用了 SceneKit 或者 SpriteKit,這個(gè)時(shí)候你想加入 AR 功能,那么恭喜你,ARKit 將會(huì)是最佳選擇。
PDFKit
iOS 11 后蘋(píng)果在 iOS 平臺(tái)開(kāi)放了 PDFKit SDK,這是一個(gè)在 MacOS 上已經(jīng)長(zhǎng)期存在的框架,但卻在 iOS 上姍姍來(lái)遲。可以使用這個(gè)框架顯示和操作 pdf 文件,你可以使用 PDFKit 實(shí)現(xiàn)顯示 pdf 文檔、顯示縮略圖、展開(kāi)大綱和搜索文字等功能。
可用性
非常實(shí)用的框架,雖然 WebView 也能閱覽 pdf,但顯然原生的體驗(yàn)是最佳的,當(dāng)然如果考慮到 iOS 8、9、10 的兼容性,可能現(xiàn)在還不到換的時(shí)候。
Core ML & Vision
蘋(píng)果在 iOS 5 里引入了 NSLinguisticTagger 來(lái)分析自然語(yǔ)言。iOS 8 出了 Metal,提供了對(duì)設(shè)備 GPU 的底層訪問(wèn)。
去年,蘋(píng)果在 Accelerate 框架添加了 Basic Neural Network Subroutines (BNNS),使開(kāi)發(fā)者可以構(gòu)建用于推理(不是訓(xùn)練)的神經(jīng)網(wǎng)絡(luò)。
今年,蘋(píng)果給了我們 Core ML 和 Vision!
-
Core ML 讓我們更容易在 App 中使用訓(xùn)練過(guò)的模型。
-
Vision 讓我們輕松訪問(wèn)蘋(píng)果的模型,用于面部檢測(cè)、面部特征點(diǎn)、文字、矩形、條形碼和物體。
總結(jié)一下,如果你已經(jīng)有了一個(gè)訓(xùn)練好的模型,你可以對(duì)圖像進(jìn)行場(chǎng)景識(shí)別。
通過(guò) Core ML 和 Vision 識(shí)別圖像所描繪的場(chǎng)景
可用性
想玩好 Core ML 和 Vision,學(xué)習(xí)曲線還是非常陡峭的。如何構(gòu)建和訓(xùn)練自己的模型是一個(gè)很大的課題,不是一朝一夕能夠完成的?;谡掌蛘呦鄼C(jī)的應(yīng)用可以考慮使用 Core ML 和 Vision,甚至可以結(jié)合 ARKit,分析基現(xiàn)實(shí)場(chǎng)景,并將虛擬信息疊加在現(xiàn)實(shí)場(chǎng)景上。
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ì)傳遞給你。
可用性
一些運(yùn)營(yíng)商或者輔助性質(zhì)的 App 可能會(huì)使用到這個(gè)功能。
DeviceCheck
通過(guò)使用 DeviceCheck 你能夠在某種程度上追蹤到這個(gè)手機(jī)使用了你開(kāi)發(fā) App 的情況(即使這個(gè) App 被卸載,或者機(jī)器被刷機(jī))。DeviceCheck 允許你通過(guò)你的服務(wù)器與 Apple 服務(wù)器通訊,并為單個(gè)設(shè)備設(shè)置兩個(gè) bit 的數(shù)據(jù)(沒(méi)錯(cuò),就是 2bit,00 01 10 11 四種可能)。這樣即使 App 被卸載重裝,被刷機(jī),App后臺(tái)照樣可以拿到之前設(shè)置的狀態(tài)。
可用性
對(duì)于新用戶活動(dòng)可以有效防刷,但是并不能取代 deviceID,因?yàn)檫@個(gè) token 是一次性的。
整個(gè)流程大致如下:
-
App 通過(guò)調(diào)用蘋(píng)果的 API 獲得一個(gè) token,然后把這個(gè)通過(guò)傳遞給后臺(tái)服務(wù)器,告訴后臺(tái),我要領(lǐng)優(yōu)惠券。
-
后臺(tái)收到 App 領(lǐng)優(yōu)惠券的請(qǐng)求之后,拿著這個(gè) token 先去蘋(píng)果后臺(tái)查詢這臺(tái)設(shè)備的狀態(tài)。
-
后臺(tái)查詢到狀態(tài)之后根據(jù)這個(gè) 2bit 數(shù)據(jù)以及對(duì)應(yīng)的 timestamp 決定要不要發(fā)放優(yōu)惠券。
-
如果要發(fā)優(yōu)惠券,發(fā)送完優(yōu)惠券之后,后臺(tái)拿著 token 去更新蘋(píng)果后臺(tái)的2bit數(shù)據(jù)。
FileProvider & FileProviderUI
-
FileProvider 實(shí)現(xiàn)了一個(gè)云文件的擴(kuò)展,讓你可以獲取用戶設(shè)備上或者云端的文件。
-
FileProviderUI 為 FileProvider 提供一套類似 Files App 的界面。
可用性
相信會(huì)成為以后文檔相關(guān)類 App 的標(biāo)配。
Core NFC
NFC(Near Field Communication)即近距離無(wú)線通訊技術(shù)。Core NFC 主要用于檢測(cè) NFC 標(biāo)簽, 并且讀取其中包含的 NDEF 數(shù)據(jù)。
要注意的是:
只能同時(shí)開(kāi)啟一個(gè) session
App 需要在前臺(tái),退入后臺(tái)失效
session 最多存活60秒,超時(shí)必須重啟新 session
需要配置 info.plist,開(kāi)啟 NFC 讀取權(quán)限
僅支持 iPhone 7 和 7P 以上包含 NFC 模塊的機(jī)型
可用性
首先,你需要有 NFC 設(shè)備。有設(shè)備的可以考慮,沒(méi)設(shè)備的也不可能為了引入新功能硬著頭皮去做 NFC。
Drag & Drop
蘋(píng)果官網(wǎng)的拖拽Demo
拖拽功能,iOS 系統(tǒng)幫助我們處理了絕大部分工作,開(kāi)發(fā)者幾乎只需要處理結(jié)果。UITextView 和 UITextField 原生支持拖拽,UICollectionView 和 UITableView 的拖拽有一系列專用的 delegate 來(lái)表明拖拽的發(fā)生和結(jié)束。而你也可以對(duì)任意 UIView 子類定義拖拽行為。和 Mac 上的拖拽不同,iOS 的拖拽充分尊重了多點(diǎn)觸控的屏幕,所以可能你需要對(duì)一次多個(gè)的拖拽行為做些特別處理。
可用性
只有 iPad 上能支持不同 App 之間的內(nèi)容拖拽共享,iPhone 上只能在 App 內(nèi)部拖拽內(nèi)容,iPhone 上的這一限制使得 Drag and Drop 大打折扣。Drag & Drop 在文本、圖片編輯類 App 上能夠大放異彩。
iPhone X 適配
Safe Area
iOS 11 設(shè)備上運(yùn)行出現(xiàn)最多問(wèn)題應(yīng)該就是 tableView 莫名奇妙地偏移了 20pt 或者 64pt。原因是 iOS 11 棄用了 automaticallyAdjustsScrollViewInsets 屬性,取而代之的是 UIScrollView 新增了 contentInsetAdjustmentBehavior 屬性,這一切的罪魁禍?zhǔn)锥际切乱氲?Safe Area。
Safe Area
Safe Area 幫助我們將 view 放置在整個(gè)屏幕的可視的部分。即使把 navigationBar 設(shè)置為透明,系統(tǒng)也認(rèn)為安全區(qū)域是從 navigationBar 的 bottom 開(kāi)始的。
安全區(qū)域定義了 view 中可視區(qū)域的部分,保證不被系統(tǒng)的狀態(tài)欄、或父視圖提供的 view 如導(dǎo)航欄覆蓋??梢允褂?additionalSafeAreaInsets 去擴(kuò)展安全區(qū)域。每個(gè) view 都可以改變安全區(qū)域嵌入的大小,controller 也可以。
safeAreaInsets 屬性反映了一個(gè) view 距離該 view 的安全區(qū)域的邊距。對(duì)于一個(gè) controller 的 rootView 而言,safeAreaInsets 值包括了被 statusBar 和其他可視的bars 覆蓋的區(qū)域和其他通過(guò) additionalSafeAreaInsets 自定義的 insets 值。對(duì)于 view 層次中的其他 view,safeAreaInsets 值反映了 view 被覆蓋的部分。如果一個(gè) view 全部在它父視圖的安全區(qū)域內(nèi),則 safeAreaInsets 值為(0,0,0,0)。
App 在 iPhone X 無(wú)法全屏
如果你的 App 在 iPhone X 上運(yùn)行發(fā)現(xiàn)沒(méi)有充滿屏幕,上下有黑邊,說(shuō)明你沒(méi)有使用 storyboard 做 LaunchImage,而是用的 Assets。Assets 的解決辦法是添加一張尺寸為 1125 x 2436 的 LaunchImage。
需要特別注意的 iPhone X 適配點(diǎn)
-
隱藏導(dǎo)航欄的界面特別要注意,因?yàn)?ldquo;耳朵”和 Safe Area 的原因,很有可能上面會(huì)露出小片空白。
-
列表頁(yè)如果沒(méi)有 tabBar,而且列表頁(yè)可以拉到最底下,請(qǐng)?jiān)诹斜眄?yè)最后留一點(diǎn)空白給手勢(shì)區(qū)域。
-
列表頁(yè)使用系統(tǒng)的 tabBar 那是完全自動(dòng)適配的,但如果是自定義的 tabBar,請(qǐng)適當(dāng)在 tabBar 底下留出空白給手勢(shì)區(qū)域。
FaceID & TouchID
注意,iPhone X 支持 FaceID 進(jìn)行身份驗(yàn)證,但不支持 TouchID驗(yàn)證。注意做好機(jī)型的區(qū)分,請(qǐng)勿在 iPhone X 上使用 TouchID,也請(qǐng)勿在其他設(shè)備上使用 FaceID。
Xcode 9更新
可以同時(shí)開(kāi)啟多個(gè)不同的模擬器
Swift 4.0 支持
重構(gòu)內(nèi)置于編輯體驗(yàn)之中,并可跨Swift,Objective-C,Interface Builder和許多其他文件類型
Named Color - 可以在 xcassets 里添加顏色,然后在代碼或者 IB 中引用這個(gè)顏色
App Store更新
整體版面
iOS 11 App Store 版面
蘋(píng)果在9月20日已經(jīng)正式向用戶推送了 iOS 11 正式版,App Store 迎來(lái)了重大的更新,不管是版面還是UI相比之前都有很大的改動(dòng)。版面上取消暢銷榜推薦;免費(fèi)榜和付費(fèi)榜的入口變深了;搜索變得更強(qiáng),可以搜索到編輯故事、精選榜單等多元內(nèi)容;增加了 Today 軟件的推薦,并且在游戲軟件中著重推薦 AR 游戲,看來(lái)全新的 App Store 也為之后的 AR 類軟件發(fā)展格局做出了鋪墊。
取消暢銷榜推薦,免費(fèi)榜和付費(fèi)榜的入口變深,說(shuō)明蘋(píng)果意在強(qiáng)化內(nèi)容以及給搜索鍍金,為 Search Ads 的到來(lái)做足前戲,同時(shí)削弱了榜單,就達(dá)到打擊刷榜的目的。
App自薦
Today 是 App Store 的最大更新,和之前的蘋(píng)果推薦不同,這次你可以向 App Store 自薦你的 App: https://developer.apple.com//contact/app-store/promote/
你需要準(zhǔn)備的資料有:開(kāi)發(fā)者名稱、應(yīng)用名稱、應(yīng)用 Apple ID、應(yīng)用描述、可支持設(shè)備、語(yǔ)言支持、地區(qū)支持、應(yīng)用題叫日期、應(yīng)用發(fā)布日期、應(yīng)用故事。
值得一提的是,在應(yīng)用描述和應(yīng)用故事上盡量闡述應(yīng)用的亮點(diǎn)和關(guān)鍵性功能等這些具有競(jìng)爭(zhēng)力的信息會(huì)更好。當(dāng)然,應(yīng)用故事會(huì)更側(cè)重情懷一點(diǎn)的東西,跟蘋(píng)果說(shuō)明你開(kāi)發(fā)應(yīng)用的靈感以及跟開(kāi)發(fā)者相關(guān)的故事等。
截圖和視頻預(yù)覽
搜索截圖展示為3張
App Store 搜索結(jié)果從 iOS 10 展示兩張 App 截圖,推進(jìn)到 iOS 11 已能展示三張。把原本需要進(jìn)入到 App 詳情頁(yè)面的才能看到的信息,更多披露在上一層級(jí),讓用戶不需要點(diǎn)擊進(jìn)入就可以了解更多信息。原本 iOS 10 上前兩張應(yīng)用截圖拼合成一張完整圖片的思路可以改變了,在 iOS 11 上,或許你應(yīng)當(dāng)設(shè)計(jì)成3張應(yīng)用截圖的拼合模式。
iOS 10 上前兩張應(yīng)用截圖拼合成一張完整圖片
此外,iOS 10 中一個(gè) App 只能上傳一個(gè) Preview Video,在 iOS 11 中開(kāi)放為 3 個(gè)。另外視頻預(yù)覽可以自動(dòng)無(wú)聲播放。
蜂窩網(wǎng)絡(luò)下載限制
蜂窩網(wǎng)絡(luò)下載限制提升到 150 MB
準(zhǔn)確來(lái)說(shuō)這不屬于 iOS 11 的變更。9月20日,蘋(píng)果除了發(fā)布 iOS 11 正式版外,還宣布變更一項(xiàng) App Store 政策,允許用戶在連接到蜂窩網(wǎng)絡(luò)時(shí)下載不超過(guò) 150 MB 的應(yīng)用,此前這個(gè)上限為 100 MB。 蘋(píng)果公司在其官方網(wǎng)頁(yè)上發(fā)布的一篇文章中提到了這個(gè)新的下載上限。
對(duì)于廣大 App 來(lái)說(shuō)是好事一件,再也不用為了擠出那么幾兆的空間而銖施兩較。為了蜂窩網(wǎng)絡(luò)下用戶的更新率,而影響業(yè)務(wù)發(fā)展,其實(shí)就有些本末倒置了。