iOS 9 下周就正式推出了,你的 app 真的适配好了吗?


编者按:本文来自腾讯第三方崩溃捕获服务Bugly,近期他们支持 ATS 及 Bitcode 特性的 SDK 即将发布。作者冯义力,腾讯 Bugly SDK 开发工程师。昨天 Apple 宣布,iOS 9 正式版会在 9 月 16 日开始推送。经历过 5 个 Beta 版后,开发者们,你们的 App 都做好适配了吗?

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://

当然,你也可以参考 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:

NSAppTransportSecurity

NSAllowsArbitrary

指定域名禁用 ATS

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

NSAppTransportSecurity

NSExceptionDomains

mine.test.com

NSExceptionAllowsInsecureHTTPLoads

指定域名修改 ATS 安全要求

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

NSAppTransportSecurity

NSExceptionDomains

mime.test.com

NSExceptionAllowsInsecureHTTPLoads

third.test.com

NSThirdPartyExceptionMinimumTLSVersion

1.1

NSThirdPartyExceptionRequiresForwardSecrecy

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 的兼容适配方便会考虑的事项。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 很可能你的应用是与一个支持HTTPS传输数据的服务器交互,但是并没有使用TLS 1.2或更高。在这种情况下,你定义...
    Www刘阅读 3,033评论 0 5
  • 当今世界,社区化生活似乎已经成为一种趋势,这里略想几个可能的案例。 问答调查社区 有一次无意间下载了一款同城交友软...
    自在牛阅读 405评论 0 1
  • Sinatra 是我很喜欢的 web 开发框架,相比与 Rails ,它更轻量级,同时给我更多的控制而不是一大堆的...
    Frederich阅读 901评论 0 1
  • 各位优秀的学兄企业家们,大家晚上好,今天是8月18日,与大家分享《正念的奇迹》一行禅师的著作。 序言一 英译者序言...
    雅璇阅读 1,118评论 0 1