你的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即将发布。

相关文章
相关标签/搜索