你的 App 真的相容 iOS 9 嗎?

作者 | 發布日期 2015 年 09 月 13 日 0:00 | 分類 app , Apple , iOS follow us in feedly
雷鋒網配圖

Apple 秋季產品發表會剛剛結束,iOS 9 GM 版本也正式發表了。新的 iPhone 裝置即將開賣,iOS 9 系統升級也將會在下周開始陸續進行推出。



在這之前,我們還可以為自己的 App 相容適配做點什麼,或者說,我們的 App 真的已經相容好 iOS 9 系統了嗎?

從 7 月份開始到現在,Apple 已發表 5 個 iOS 9 的 Beta 版本,相信開發者在這段時間也已經把 iOS 9 系統的特性基本瞭解清楚,也為自己的 App 進行了一系列相容適配處理。

但在這裡,筆者還是要再次跟大家聊聊 iOS 9 中兩個比較特別的特性及其相容問題,即:App Transport Security和App Thinning。

 

App Transport Security

App Transport Security is a feature that improves the security of connections between an app and web services. The feature consists of default connection requirements that conform to best practices for secure connections.

App Transport Security(ATS)是 Apple 為提高系統及應用安全性而在 iOS 9 和 OS X EI Capitan 中引入的新特性,必然,出於安全性的考慮,在新發表的 watchOS 2 系統中也會適用。

一旦開啟 ATS 後,應用所有的網路請求將會自動轉換為 HTPPS 傳輸,且採用一系列配置要求來保證資料傳輸的安全性,包括:

  • Transport Layer Security 協議版本要求 TLS1.2 以上
  • 服務的 Ciphers 配置要求支援 Forward Secrecy 等
  • 證書簽名演算法符合 ATS 要求等

這些配置項在升級伺服器支援 HTTPS 過程中都需要嚴格遵守的,否則就會導致你的 HTTPS 服務在 iOS 9 系統中連接仍是失效的。

如果你的 App 服務也在升級以適配 ATS 要求,可以使用如下的方式進行校驗:

在 OS X EI Capitan 系統的裝置中透過 nscurl 命令,來診斷檢查你的 HTTPS 服務配置是否滿足 Apple 的 ATS 要求:$ nscurl –verbose –ats-diagnostics https://<your_server_domain>

當然,你也可以參考 Apple 提供官方指南 App Transport Security Technote 進行服務的升級配置以滿足 ATS 的要求。

Apple 雖然希望開發者可以積極的參與並為系統及應用安全共同努力,但官方仍提供了一些參考配置去禁用 ATS 功能或降低 ATS 的安全性要求。

開發者可以在 App 的 Info.plist 中添加 NSAppTransportSecurity 的相關配置,用以禁用 ATS 或者添加白名單,可用的配置參數如下:

  • NSAllowsArbitraryLoads:設置 true 即支持所有 HTTP 請求
  • NSExceptionDomains:添加白名單
  • NSExceptionMinimumTLSVersion:白名單指定功能變數名稱支援的 TLS 版本
  • NSExceptionRequiresForwardSecrecy:白名單指定功能變數名稱是否支援 Forward Secrecy
  • NSExceptionAllowsInsecureHTTPLoads:白名單指定功能變數名稱禁用 ATS
  • NSThirdPartyExceptionMinimumTLSVersion:白名單指定協力廠商服務功能變數名稱最低支援的 TLS 版本
  • NSThirdPartyExceptionRequiresForwardSecrecy:白名單指定協力廠商服務功能變數名稱是否支援 Forward Secrecy
  • NSThirdPartyExceptionAllowsInsecureHTTPLoads:白名單指定協力廠商功能變數名稱禁用 ATS

舉個例子:

禁用所有連接使用 ATS

在 Info.plist 中配置禁用 ATS:

雷鋒網配圖

指定功能變數名稱禁用 ATS

在 Info.plist 中配置 App 的服務功能變數名稱 mine.test.com 支持 HTTP:

雷鋒網配圖

指定功能變數名稱修改 ATS 安全要求

在 Info.plist 中配置協力廠商服務 third.test.com 的 TLS1.1 及禁用 Forward Secrecy:

雷鋒網配圖

App Thinning

The App Store and operating system optimize the installation of iOS and watchOS apps by tailoring app delivery to the capabilities of the user’s particular device, with minimal footprint. This optimization, called app thinning, lets you create apps that use the most device features, occupy minimum disk space, and accommodate future updates that can be applied by Apple. Faster downloads and more space for other apps and content provides a better user experience.

開發者都知道,當前 iOS App 的編譯打包方式是把適配相容多個裝置的執行檔及資源檔合併一個檔,上傳和下載的檔則包含了所有的這些檔,導致佔用較多的儲存空間。

App Thinning 是一個關於節省 iOS 裝置儲存空間的功能,它可以讓 iOS 裝置在安裝、更新及運行 App 時僅下載所需的資源,減少 App 的佔用空間,從而節省裝置的儲存空間。

 

根據 Apple 官方文檔的介紹,App Thinning 主要有 3 個機制:

Slicing

開發者把 App 安裝包上傳到 App Store 後,Apple 服務會自動對安裝包切割為不同的應用變體(App variant),當用戶下載安裝包時,系統會根據設備型號下載安裝對應的單個應用變體。

On-Demand Resources

ORD(隨需資源)是指開發者對資源添加標籤上傳後,系統會根據 App 運行的情況,動態下載並載入所需資源,而在儲存空間不足時,自動刪除這類資源。

Bitcode

開啟 Bitcode 編譯後,可以使得開發者上傳 App 時只需上傳 Intermediate Representation(中介軟體),而非最終的可執行二進位檔案。 在用戶下載 App 之前,AppStore 會自動編譯中介軟體,產生設備所需的執行檔供用戶下載安裝。

其中,Bitcode 的機制可以支援動態的進行 App Slicing,而對於 Apple 未來進行硬體升級的措施,此機制可以保證在開發者不重新發布版本的情況下而相容新的裝置。

 

如果你的應用也準備啟用 Bitcode 編譯機制,就需要注意以下幾點:

  • Xcode 7 預設開啟 Bitcode,如果應用程式開啟 Bitcode,那麼其集成的其他協力廠商庫也需要是 Bitcode 編譯的包才能真正進行 Bitcode 編譯。
  • 開啟 Bitcode 編譯後,編譯產生的 .app 體積會變大(中間程代碼,不是用戶下載的包裝檔),且 .dSYM 檔不能用來崩潰日誌的符號化(使用者下載的包是 Apple 服務重新編譯產生的,有產生新的符號檔)。
  • 透過 Archive 方式上傳 AppStore,可以在 Xcode 的 Organizer 工具中下載對應安裝包的新的符號檔。

iOS 9 的 ATS 特性和 App Thinning 特性給開發者帶來安全提升和體驗上的優化,也是開發者在後續 App 的相容調整方便會考慮的事項。

(本文由 雷鋒網 授權轉載) 

關鍵字: , ,

發表迴響