你的App真正適配了iOS 9嗎?


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

但在這裏,筆者仍是要再次跟你們聊聊iOS 9中兩個比較特別的特性及其兼容問題,即:App Transport SecurityApp Thinningios

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.web

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

一旦開啓ATS後,應用全部的網絡請求將會自動轉換爲HTPPS傳輸,且採用一系列配置要求來保證數據傳輸的安全性,包括:api

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

這些配置項在升級服務器支持HTTPS過程當中都須要嚴格遵照的,不然就會致使你的HTTPS服務在iOS 9系統中鏈接還是失效的。安全

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

在OS X EI Capitan系統的終端中經過nscurl命令來診斷檢查你的HTTPS服務配置是否知足Apple的ATS要求:markdown

$ nscurl --verbose --ats-diagnostics https://<your_server_domain>

固然,你也能夠參考Apple提供官方指南App Transport Security Technote進行服務的升級配置以知足ATS的要求。網絡

Apple雖然但願開發者能夠積極的參與併爲系統及應用安全共同努力,但官方仍提供了一些參考配置去禁用ATS功能或下降ATS的安全性要求。app

開發者能夠在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:

       <key>NSAppTransportSecurity</key>
        <dict>
            <key>NSAllowsArbitrary</key>
            <true/>
        </dict>
  • 指定域名禁用ATS

    在Info.plist中配置App的服務域名mine.test.com支持HTTP:

       <key>NSAppTransportSecurity</key>
        <dict>
            <key>NSExceptionDomains</key>
            <dict>
                <key>mine.test.com</key>
                <dict>
                    <key>NSExceptionAllowsInsecureHTTPLoads</key>
                    <false/>
                </dict>
            </dict>
        </dict>
  • 指定域名修改ATS安全要求

    在Info.plist中配置第三方服務third.test.com的TLS1.1及禁用Forward Secrecy:

       <key>NSAppTransportSecurity</key>
        <dict>
            <key>NSExceptionDomains</key>
            <dict>
                <key>mime.test.com</key>
                <dict>
                    <key>NSExceptionAllowsInsecureHTTPLoads</key>
                    <false/>
                </dict>
                <key>third.test.com</key>
                <dict>
                    <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                    <string>1.1<string/>
                    <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                    <false/>
                </dict>
            </dict>
        </dict>

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主要有三個機制:

  • Slicing

    開發者把App安裝包上傳到AppStore後,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的兼容適配方便會考慮的事項。

Bugly做爲第三方的崩潰捕獲服務,在兼容適配的問題上必定不會拖開發者後腿。

支持ATS及Bitcode特性的SDK即將發佈。

相關文章
相關標籤/搜索