阅读更多

4顶
1踩

移动开发

原创新闻 你的App真正适配了iOS 9吗?

2015-09-11 14:48 by 副主编 mengyidan1988 评论(0) 有7345人浏览
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编译机制,就需要注意以下几点:
1.Xcode 7默认开启Bitcode,如果应用开启Bitcode,那么其集成的其他第三方库也需要是Bitcode编译的包才能真正进行Bitcode编译。
2.开启Bitcode编译后,编译产生的.app体积会变大(中间代码,不是用户下载的包),且.dSYM文件不能用来崩溃日志的符号化(用户下载的包是Apple服务重新编译产生的,有产生新的符号文件)。
3.通过Archive方式上传AppStore的包,可以在Xcode的Organizer工具中下载对应安装包的新的符号文件。

本文作者:冯义力 腾讯Bugly SDK高级开发工程师
4
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 图文讲解如何解决App的iOS 7顶部状态栏适配问题

    首先说明下,ios7中,由于status bar不再占用单独的20px,如果app需要同时支持ios7和ios6.1以下,那就需要适配下了,适配开始: 先看用xcode新建项目后 IOS7和IOS6上的的运行效果: ps:一个empty application 里面+了...

  • [转] iOS --- 你的App真正适配了iOS 9吗?

    转载一篇iOS 9适配的文章(出自CSDN): 你的App真正适配了iOS 9吗?

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

    从7月份开始到现在,Apple已发布5个iOS 9的Beta版本,相信开发者在这段时间也已经把iOS 9系统的特性基本了解清楚,也为自己的App进行了一系列兼容适配处理。但在这里,笔者还是要再次跟大家聊聊iOS 9中两个比较特别...

  • 总结适配IOS10开发需要注意的问题

    谁知道APP在IOS10上会遇到什么鬼情况!最怕的就是闪退。。。于是在上线前做了很多关于IOS10的适配工作,其中也踩了很多坑。所以在这里记录总结一下。 1、自动管理证书 首先要说的就是Xcode8。打开Xcode8最明显的...

  • iOS10 App适配权限 Push Notifications 字体Frame 遇到的问题

    主要介绍了iOS10 App适配权限 Push Notifications 字体Frame 遇到的问题,非常不错,具有参考借鉴价值,需要的朋友可以参考下

  • 【无标题】App iOS端适配iOS 15系统

    App iOS端适配iOS 15系统,适配后将使用新的xcode 13打包提交App Store。 一、适配内容: 1、新增了iPhone 13 mini机型(尺寸同iPhone12 mini),5.4 英寸 (对角线) OLED 全面屏,屏幕分辨率为2340 x 1080 像素。...

  • XZ_iOS之Xcode9的变化和APP界面适配iOS11

    3、解决在Xcode8.3.3和Xcode9共存的情况下,使用Xcode9打开工程,但是,模拟器启动不了的情况和模拟器加载不出来,没有模拟器可以选择的情况: 启动不了的解决:在Xcode-Preferences-Locations中,Comma

  • uniapp App(Android、iOS)适配建议

    uniapp功能强大,但是难免会存在一些适配的坑,此文记录一些适配的经验,会持续更新,希望能帮助到正在适配app中你,如你有新的适配经验,欢迎留言、评论。 当新功能开发完毕后需真机运行适配App,避免再让其他人...

  • 如何让一套代码适配所有iOS设备尺寸?

    阿里巴巴文娱技术 氚雨 将分享优酷APP在iOS响应式布局技术上的实践和落地。响应式是基于同一套代码,开发一个APP能够兼容多尺寸、多终端设备的显示,能够动态调整页面的布局以及容器的布局,充分利用当前屏幕的尺寸...

  • APP开发屏幕适配原理及实现方法(Android、iOS)

    Android屏幕适配方案、iOS屏幕适配方案,移动应用APP开发中,屏幕适配问题全攻略。详细说明了屏幕适配原理以及实现方法。

  • ios项目适配ios6 ios7

    ios项目适配ios6 ios7 注重页面属性的修改。

  • App通用引导页ios版

    作者ahu209,源码SCGuide,本demo演示了APP引导页的一种实现方式。只需将工程里面的SCGuide文件夹导入自己的工程里面,并引入SCGuideViewController.h头文件即可使用。具体使用方式,参考demo的实现。

  • Android App想适配华为 HarmonyOS,难吗?

    第三部分,Cocos 引擎研发 CTO 林顺,从 Cocos 引擎对 HarmonyOS 平台的适配和发布工作流出发,带你了解 Cocos 引擎的技术进展,以及小游戏、在线教育在HarmonyOS 平台的技术方案; 第四部分,宝宝巴士的杨清山通过...

  • iOS 的 APP 在系统中如何适配不同的屏幕的尺寸

    iOS 的 APP 在系统中如何适配不同的屏幕的尺寸 转自:http://www.mamicode.com/info-detail-853711.html 2007年,初代iPhone发布,屏幕的宽高是 320 x 480 像素。下文也是按照宽度,高度的顺序排列。这个...

  • iOS 16 版本适配

    11、iOS16.0 第三方输入法键盘在频繁弹出、收起时,会出现over-release导致闪退,如果遇到控制器跳页,并且键盘频繁弹出、收起的情况,建议拉长键盘弹出间隔,比如把键盘弹出放到viewDidAppear中,不会彻底解决,但...

  • 适配iOS9

    适配iOS9前言:2015年9月8日,苹果宣布iOS 9操作系统的正式版在太平洋时间9月16日正式推出,北京时间9月17日凌晨1点推送。新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放。iOS9加入了更多的新功能,包括...

  • Flutter设置ios的app只适配iPhone设备

    最近给公司开发了一个多端的Flutter的应用,目前只是适配手机端,但是IOS的应用发布到苹果审核的时候,如果在配置中指定了支持Ipad,就会导致要求上传Ipad的效果图才能提交审核,可是我们的应用并不想支持Ipad的设备...

  • go 生成基于 graphql 服务器库.zip

    格奇尔根 首页 > 文件 > gqlgen是什么?gqlgen是一个 Go 库,用于轻松构建 GraphQL 服务器。gqlgen 基于 Schema 优先方法— 您可以使用 GraphQL Schema 定义语言来定义您的 API 。gqlgen 优先考虑类型安全— 您永远不应该看到map[string]interface{}这里。gqlgen 启用 Codegen — 我们生成无聊的部分,以便您可以专注于快速构建您的应用程序。还不太确定如何使用gqlgen?将gqlgen与其他 Go graphql实现进行比较快速启动初始化一个新的 go 模块mkdir examplecd examplego mod init example添加github.com/99designs/gqlgen到项目的 tools.goprintf '//go:build tools\npackage tools\nimport (_ "github.com/99designs/gqlgen"\n _ "github.com/99designs/gqlgen

Global site tag (gtag.js) - Google Analytics