萝莉有话说:你的App真正适配了iOS 9吗?

时隔三月,如隔三秋。越过层层文档,穿过条条代码,小萝莉终于又和大家见面了!用户朋友们,我想死你们了!当然萝莉来此,并不是来和大家聊春晚的,我们的主题依旧是iOS。

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

本文分享自微信公众号 - 腾讯Bugly(weixinBugly)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-09-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黄希彤的专栏

Nginx 反向代理腾讯云 COS 的一个坑

腾讯云COS的后台服务假设客户端都支持http1.1协议,对http1.0协议没有做很好的兼容,而腾讯云CVM提供的带Nginx的系统镜像里面的Nginx版本又...

2.4K00
来自专栏Jerry的SAP技术分享

如何从ERP将Material的Batch信息下载到CRM并存储在settype COMM_PR_BATCH里

前提条件:必须先确保三个对象ATTRIBUTE, CLASS和OBJCL成功下载。可以到事物码R3AM1里查看,确保状态全部为Done。

392120
来自专栏地方网络工作室的专栏

打造前端 Deepin Linux 工作环境——安装配置 atom 编辑器

打造前端 Deepin Linux 工作环境——安装配置 atom 编辑器 好,我个人推荐大家使用 atom 编辑器,第一是免费,第二是好看,第三是好用。 安装...

66780
来自专栏腾讯NEXT学位

React 16 加载性能优化指南(上)

公司的新项目迁移到了 React 16 和 Webpack 4.0,写一篇文章来总结一下。

75750
来自专栏葡萄城控件技术团队

HTML5 & CSS3初学者指南(3) – HTML5新特性

介绍 本文介绍了 HTML5 的一些新特性。主要包含以下几个方面: Web 存储 地理位置 拖放 服务器发送事件 Web存储 HTML5...

28580
来自专栏IT笔记

前后端分离之Vue项目构建测试打包发布

写在开始 其实之前对前后端分离研究过一段时间,中间由于项目进度耽搁也就不了了之了,最近项目中部分使用到了Vue,恰逢前端小伙伴们居然说要使用这个东西,也许是前端...

40190
来自专栏云计算教程系列

CentOS 如何配置NTP加入NTP池项目

准确的计时对于几乎所有服务或软件都至关重要。在分布式平台上运行的电子邮件,记录器,事件系统和调度程序,用户身份验证机制和服务都需要准确的时间戳来按时间顺序记录事...

20400
来自专栏高性能分布式系统设计

让Atom的go plus插件兼容govendor

目前,go plus插件不会在项目的vendor目录搜索, 有人提了issue,被残忍的关闭了. 解决方案: 在go path里面建立一个目录叫 vendor,...

399100
来自专栏不二小段

【爬虫军火库】AnyProxy安装使用【Windows】

分析网络请求详情是写爬虫应用的初始步骤,抓包便是一种十分强大的分析手段,尤其是对手机App进行抓包,往往能收获到Web端没有的API接口。抓包的工具多种多样,功...

2.4K60
来自专栏腾讯NEXT学位

小程序iOS客户端框架——控件事件逻辑框架与控件原生化(上)

? 小程序自发布以来,为开发者和用户提供了一种轻量级的App。作为一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打...

22710

扫码关注云+社区

领取腾讯云代金券