1. 程式人生 > >iOS開發之App開發團隊必須知道的 iOS 11 更新點幾iPhoneX的螢幕適配

iOS開發之App開發團隊必須知道的 iOS 11 更新點幾iPhoneX的螢幕適配

WWDC 2017 已經過去差不多一個季度了,最近隨著 Xcode 9 正式版以及 iPhone 8、iPhone X 的釋出,iOS 11 的全面適配也被提上了日程。我整理了一下更新點,包括開發、設計、產品甚至是市場都應該注意的點,分享出來希望對大家有所幫助。

新增框架

ARKit

iOS 11 引入了新的 ARKit 框架,讓您輕鬆建立無可比擬的 iPhone 和 iPad 增強現實體驗。 通過將數字物件和資訊與您周圍的環境相融合,ARKit 為 App 解開了螢幕之縛,帶領著它們跨越螢幕的界限,讓它們以全新的方式與現實世界交流互動。

通過攝像頭看到虛擬物體在現實場景上的疊加
通過攝像頭看到虛擬物體在現實場景上的疊加

ARKit 框架提供了兩種 AR 技術,一種是基於3D場景(SceneKit)實現的增強現實,一種是基於2D場景(SpriteKit)實現的增強現實。

要想顯示 AR 效果,必須要依賴於蘋果的遊戲引擎框架(3D引擎 SceneKit,2D引擎 SpriteKit),主要原因是遊戲引擎才可以載入物體模型。

雖然ARKit框架中檢視物件繼承於 UIView,但是由於目前 ARKit 框架本身只包含相機追蹤,不能直接載入物體模型,所以只能依賴於遊戲引擎載入 ARKit。

另外需要說明的一點是,ARKit 雖然是 iOS11 新出的框架,但並不是所有的 iOS11 系統都可以使用,而是必須要是處理器 A9 及以上才能夠使用,蘋果從 iPhone 6S 開始使用 A9 處理器,也就是 iPhone 6 及以前的機型無法使用 ARKit。

可用性

沒有 ARKit 當然也可以做 AR,Pokémon Go 就是最好的例證。ARKit 只是降低了做 AR 的門檻。

ARKit 的使用場景比較侷限,必須 iOS 11 系統,而且處理器必須是 A9 及以上。如果你需要長時間大量支援 iOS 8、9、10 的系統,以及 iPhone 6S 之前的系統,你可能需要重新考慮你的 AR 方案了。

由於要涉及蘋果的遊戲引擎框架(3D 引擎 SceneKit,2D引擎 SpriteKit),學習曲線較為陡峭,需要開發進行長時間的知識儲備。

如果僅僅針對某些推廣活動而使用 ARKit,由於推廣活動的時效短,ARKit 的學習成本大,總體上價效比較低,不推薦。

如果整個 App 是基於 AR 的服務功能,那麼這將會是一個不錯的 idea,例如基於攝像頭的“大眾點評”,我們可以直接通過攝像頭展示的現實世界,疊加一些資訊顯示商家的評分和地理位置。

對於跨平臺的遊戲而言,由於相容性問題,ARKit 也不是一個很好的解決方案。如果只涉及蘋果平臺,並且你已經使用了 SceneKit 或者 SpriteKit,這個時候你想加入 AR 功能,那麼恭喜你,ARKit 將會是最佳選擇。

PDFKit

iOS 11 後蘋果在 iOS 平臺開放了 PDFKit SDK,這是一個在 MacOS 上已經長期存在的框架,但卻在 iOS 上姍姍來遲。可以使用這個框架顯示和操作 pdf 檔案,你可以使用 PDFKit 實現顯示 pdf 文件、顯示縮圖、展開大綱和搜尋文字等功能。

可用性

非常實用的框架,雖然 WebView 也能閱覽 pdf,但顯然原生的體驗是最佳的,當然如果考慮到 iOS 8、9、10 的相容性,可能現在還不到換的時候。

Core ML & Vision

蘋果在 iOS 5 裡引入了 NSLinguisticTagger 來分析自然語言。iOS 8 出了 Metal,提供了對裝置 GPU 的底層訪問。

去年,蘋果在 Accelerate 框架添加了 Basic Neural Network Subroutines (BNNS),使開發者可以構建用於推理(不是訓練)的神經網路。

今年,蘋果給了我們 Core ML 和 Vision!

  • Core ML 讓我們更容易在 App 中使用訓練過的模型。
  • Vision 讓我們輕鬆訪問蘋果的模型,用於面部檢測、面部特徵點、文字、矩形、條形碼和物體。

總結一下,如果你已經有了一個訓練好的模型,你可以對影象進行場景識別。

通過 Core ML 和 Vision 識別影象所描繪的場景
通過 Core ML 和 Vision 識別影象所描繪的場景

可用性

想玩好 Core ML 和 Vision,學習曲線還是非常陡峭的。如何構建和訓練自己的模型是一個很大的課題,不是一朝一夕能夠完成的。基於照片或者相機的應用可以考慮使用 Core ML 和 Vision,甚至可以結合 ARKit,分析基現實場景,並將虛擬資訊疊加在現實場景上。

IdentityLookup

可以自己開發一個 App Extension 來攔截系統 SMS 和 MMS 的資訊。系統的資訊 App 在接到未知的人的簡訊時,會詢問所有開啟的過濾擴充套件,如果擴充套件表示該訊息應當被攔截,那麼這則資訊將不會傳遞給你。

可用性

一些運營商或者輔助性質的 App 可能會使用到這個功能。

DeviceCheck

通過使用 DeviceCheck 你能夠在某種程度上追蹤到這個手機使用了你開發 App 的情況(即使這個 App 被解除安裝,或者機器被刷機)。DeviceCheck 允許你通過你的伺服器與 Apple 伺服器通訊,併為單個裝置設定兩個 bit 的資料(沒錯,就是 2bit,00 01 10 11 四種可能)。這樣即使 App 被解除安裝重灌,被刷機,App後臺照樣可以拿到之前設定的狀態。

可用性

對於新使用者活動可以有效防刷,但是並不能取代 deviceID,因為這個 token 是一次性的。

整個流程大致如下:

  1. App 通過呼叫蘋果的 API 獲得一個 token,然後把這個通過傳遞給後臺伺服器,告訴後臺,我要領優惠券。
  2. 後臺收到 App 領優惠券的請求之後,拿著這個 token 先去蘋果後臺查詢這臺裝置的狀態。
  3. 後臺查詢到狀態之後根據這個 2bit 資料以及對應的 timestamp 決定要不要發放優惠券。
  4. 如果要發優惠券,傳送完優惠券之後,後臺拿著 token 去更新蘋果後臺的2bit資料。

FileProvider & FileProviderUI

  • FileProvider 實現了一個雲檔案的擴充套件,讓你可以獲取使用者裝置上或者雲端的檔案。
  • FileProviderUI 為 FileProvider 提供一套類似 Files App 的介面。

可用性

相信會成為以後文件相關類 App 的標配。

Core NFC

NFC(Near Field Communication)即近距離無線通訊技術。Core NFC 主要用於檢測 NFC 標籤, 並且讀取其中包含的 NDEF 資料。

要注意的是:

  1. 只能同時開啟一個 session
  2. App 需要在前臺,退入後臺失效
  3. session 最多存活60秒,超時必須重啟新 session
  4. 需要配置 info.plist,開啟 NFC 讀取許可權
  5. 僅支援 iPhone 7 和 7P 以上包含 NFC 模組的機型

可用性

首先,你需要有 NFC 裝置。有裝置的可以考慮,沒裝置的也不可能為了引入新功能硬著頭皮去做 NFC。

Drag & Drop

蘋果官網的拖拽Demo
蘋果官網的拖拽Demo

拖拽功能,iOS 系統幫助我們處理了絕大部分工作,開發者幾乎只需要處理結果。UITextView 和 UITextField 原生支援拖拽,UICollectionView 和 UITableView 的拖拽有一系列專用的 delegate 來表明拖拽的發生和結束。而你也可以對任意 UIView 子類定義拖拽行為。和 Mac 上的拖拽不同,iOS 的拖拽充分尊重了多點觸控的螢幕,所以可能你需要對一次多個的拖拽行為做些特別處理。

可用性

只有 iPad 上能支援不同 App 之間的內容拖拽共享,iPhone 上只能在 App 內部拖拽內容,iPhone 上的這一限制使得 Drag and Drop 大打折扣。Drag & Drop 在文字、圖片編輯類 App 上能夠大放異彩。

iPhone X 適配

Safe Area

iOS 11 裝置上執行出現最多問題應該就是 tableView 莫名奇妙地偏移了 20pt 或者 64pt。原因是 iOS 11 棄用了 automaticallyAdjustsScrollViewInsets 屬性,取而代之的是 UIScrollView 新增了 contentInsetAdjustmentBehavior 屬性,這一切的罪魁禍首都是新引入的 Safe Area。

Safe Area
Safe Area

Safe Area 幫助我們將 view 放置在整個螢幕的可視的部分。即使把 navigationBar 設定為透明,系統也認為安全區域是從 navigationBar 的 bottom 開始的。

安全區域定義了 view 中可視區域的部分,保證不被系統的狀態列、或父檢視提供的 view 如導航欄覆蓋。可以使用 additionalSafeAreaInsets 去擴充套件安全區域。每個 view 都可以改變安全區域嵌入的大小,controller 也可以。

safeAreaInsets 屬性反映了一個 view 距離該 view 的安全區域的邊距。對於一個 controller 的 rootView 而言,safeAreaInsets 值包括了被 statusBar 和其他可視的bars 覆蓋的區域和其他通過 additionalSafeAreaInsets 自定義的 insets 值。對於 view 層次中的其他 view,safeAreaInsets 值反映了 view 被覆蓋的部分。如果一個 view 全部在它父檢視的安全區域內,則 safeAreaInsets 值為(0,0,0,0)。

App 在 iPhone X 無法全屏

如果你的 App 在 iPhone X 上執行發現沒有充滿螢幕,上下有黑邊,說明你沒有使用 storyboard 做 LaunchImage,而是用的 Assets。Assets 的解決辦法是新增一張尺寸為 1125 x 2436 的 LaunchImage。

需要特別注意的 iPhone X 適配點

  1. 隱藏導航欄的介面特別要注意,因為“耳朵”和 Safe Area 的原因,很有可能上面會露出小片空白。
  2. 列表頁如果沒有 tabBar,而且列表頁可以拉到最底下,請在列表頁最後留一點空白給手勢區域。
  3. 列表頁使用系統的 tabBar 那是完全自動適配的,但如果是自定義的 tabBar,請適當在 tabBar 底下留出空白給手勢區域。

FaceID & TouchID

注意,iPhone X 支援 FaceID 進行身份驗證,但不支援 TouchID驗證。注意做好機型的區分,請勿在 iPhone X 上使用 TouchID,也請勿在其他裝置上使用 FaceID。

Xcode 9更新

  • 可以同時開啟多個不同的模擬器
  • Swift 4.0 支援
  • 重構內置於編輯體驗之中,並可跨Swift,Objective-C,Interface Builder和許多其他檔案型別
  • Named Color - 可以在 xcassets 裡新增顏色,然後在程式碼或者 IB 中引用這個顏色

App Store更新

整體版面

iOS 11 App Store 版面
iOS 11 App Store 版面

蘋果在9月20日已經正式向用戶推送了 iOS 11 正式版,App Store 迎來了重大的更新,不管是版面還是UI相比之前都有很大的改動。版面上取消暢銷榜推薦;免費榜和付費榜的入口變深了;搜尋變得更強,可以搜尋到編輯故事、精選榜單等多元內容;增加了 Today 軟體的推薦,並且在遊戲軟體中著重推薦 AR 遊戲,看來全新的 App Store 也為之後的 AR 類軟體發展格局做出了鋪墊。

取消暢銷榜推薦,免費榜和付費榜的入口變深,說明蘋果意在強化內容以及給搜尋鍍金,為 Search Ads 的到來做足前戲,同時削弱了榜單,就達到打擊刷榜的目的。

App自薦

你需要準備的資料有:開發者名稱、應用名稱、應用 Apple ID、應用描述、可支援裝置、語言支援、地區支援、應用題叫日期、應用釋出日期、應用故事。

值得一提的是,在應用描述和應用故事上儘量闡述應用的亮點和關鍵性功能等這些具有競爭力的資訊會更好。當然,應用故事會更側重情懷一點的東西,跟蘋果說明你開發應用的靈感以及跟開發者相關的故事等。

截圖和視訊預覽

搜尋截圖展示為3張
搜尋截圖展示為3張

App Store 搜尋結果從 iOS 10 展示兩張 App 截圖,推進到 iOS 11 已能展示三張。把原本需要進入到 App 詳情頁面的才能看到的資訊,更多披露在上一層級,讓使用者不需要點選進入就可以瞭解更多資訊。原本 iOS 10 上前兩張應用截圖拼合成一張完整圖片的思路可以改變了,在 iOS 11 上,或許你應當設計成3張應用截圖的拼合模式。

iOS 10 上前兩張應用截圖拼合成一張完整圖片
iOS 10 上前兩張應用截圖拼合成一張完整圖片

此外,iOS 10 中一個 App 只能上傳一個 Preview Video,在 iOS 11 中開放為 3 個。另外視訊預覽可以自動無聲播放。

蜂窩網路下載限制

蜂窩網路下載限制提升到 150 MB
蜂窩網路下載限制提升到 150 MB

準確來說這不屬於 iOS 11 的變更。9月20日,蘋果除了釋出 iOS 11 正式版外,還宣佈變更一項 App Store 政策,允許使用者在連線到蜂窩網路時下載不超過 150 MB 的應用,此前這個上限為 100 MB。 蘋果公司在其官方網頁上釋出的一篇文章中提到了這個新的下載上限。

對於廣大 App 來說是好事一件,再也不用為了擠出那麼幾兆的空間而銖施兩較。為了蜂窩網路下使用者的更新率,而影響業務發展,其實就有些本末倒置了。