关于iOS9.0~9.3 App Store下载奔溃问题

问题出现前提:

1.使用Xcode8打包

2.运行系统iOS9.0~9.3

3.图片添加在Assets资源下

问题描述

版本上线后使用同事的iOS9.1系统的6sp手机运行闪退,而这个手机在使用真机直接运行安装、扫描二维码安装ipa包,都是没有问题的。

去友盟错误列表反馈报以下错误提示:

Application received signal SIGTRAP

最终定位到了P3资源文件的问题上了,图片资源文件里有16位图,显示模式为P3

原理:

如果你的app需要支持广色域显示的话,那你必须得把target设置成iOS 9.3+,相反,如果你的app不需要支持广色域且你想兼容 iOS 9.3 之前的项目,你就得把资源文件所有的16位的或者显示模式为’P3’图片全都替换成8位模式的SRGB颜色的图片

1.查找16位模式的SRGB颜色的图片步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1.打一个ipa包,将该文件后缀名.ipa为.zip

2.解压该.zip文件,解压后的目录里面会有一个Payload文件夹

3.打开终端切换到Payload文件下的.app路径

cd ~/路径/appname.app

4.用find命名定位到Asset.car文件

find . -name 'Assets.car'

5.使用 assetutil 命令导出图片的信息存储到Assets.json文件中


sudo xcrun --sdk iphoneos assetutil --info ./Assets.car > /tmp/Assets.json

6.使用以下命令 打开上步生成的/tmp/Assets.json

open /tmp/Assets.json
查找“DisplayGamut": “P3”,
看到"Encoding" : "ARGB-16",这个就是要被替换的图片

{
"SizeClass Vertical" : "universal",
"Graphics" : "GLES2,0", "Name" : "ianisme.com",
"Scale" : 2, "Idiom" : "universal",
"Memory" : "512MB",
"LayoutDirection" : "0 - Horizontal",
"DisplayGamut" : "P3",
"Encoding" : "ARGB-16",
"SizeClass Horizontal" : "universal",
"Image Type" : "kCoreThemeOnePartScale",
"AssetType" : "Image",
"Subtype" : 0,
"EdgeInsets" : "top:0 left:0 bottom:0 right:0"
},

解决问题

1修改图片:
1
使用ColorSync实用工具将这个描述文件修改下

指派它的描述文件为sRGB IEC61966-2.1,保存.

至此我们的问题完美解决。

2改变图片位置

将问题图片从Assets移除,直接添加到工程中使用

以上内容参考以下文章:

Xcode 8 build crash on iOS 9.2 and below