iOS 9.2.1 从App Store下载后出现莫名其妙崩溃

今天发了一个版本,上线以后发现 iOS9.2,9.2.1,9.1.2,9.0.2这几个系统崩溃的莫名其妙
在友盟后台也只能看到崩溃到了umenghandler,也看不到具体的崩溃位置

最后实在没有办法,搜索了一下,居然真搜到了原因

原理:在 Xcode 8 中,当你资源文件中[含有16位图]或者[图片显示模式γ值为’P3′]且iOS targets设定为iOS 9.3以下就会出现这个问题. 如果你的app需要支持广色域显示的话,那你必须得把target设置成iOS 9.3+,相反,如果你的app不需要支持广色域且你想兼容 iOS 9.3 之前的项目,你就得把所有的16位的或者显示模式为’P3’图片全都替换成8位模式的SRGB颜色的图片。

步骤:

1.导出项目的 ipa 文件

2.定位到该ipa文件修改后缀名.ipa 为 .zip.

  1. 解压该 .zip 文件. 解压后的目录里面会有一个包含着你的 app bundle 文件的 Payload 文件夹.

  2. 打开终端病切换到你的app的Payload文件夹下的 .app bundle 文件夹内,形式如下:

cd path/to/Payload/your.app

  1. 用 find 命令定位到 Assets.car 文件 .app bundle , 形式如下:

find . -name ‘Assets.car’

  1. 使用 assetutil 命令找到任何包含着 16-bit or P3 的资源文件, 对每个 Assets.car 之行以下命令 :

sudo xcrun –sdk iphoneos assetutil –info ~/Assets.car> ~/Assets.json

注:这里的~/Assets.car指的是Assets.car的路径,不要直接复制!!!可以将Assets.car文件放到 home 目录下再 操作。

  1. 打开上一步生成的 ~/Assets.json 文件并查找包含有 “DisplayGamut”: “P3” 或者相关的内容. 这段json的”Name”字段对应的值就是16位或显示的γ值为P3的资源文件名.

找到那个图片后,发现确实导出有问题

参考链接:

关于iOS 9.2.1 从App Store下载出现不规则崩溃的问题