P3/bit16资源文件导致iOS9.2以下AppStore线上应用奔溃
Posted 乌戈勒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3/bit16资源文件导致iOS9.2以下AppStore线上应用奔溃相关的知识,希望对你有一定的参考价值。
前言
公司项目集成了bugly奔溃收集系统,发现线上crash率在某一个版本特别高。
但是在奔溃堆栈中查不到有用的信息,通过上传符号表DSYM也没法准确定位到具体的代码函数。
接着根据统计数据分析出,问题出现在ios9.0~iOS9.2之间。
然后从同事那里借了一部iOS9.2的机子,先从AppStore下载线上版本,一启动,果然必奔溃。
然后通过Xcode安装下来的,却不会出现奔溃,通过Jenkins打包系统打包,下载下来的,依然没问题。
通过各种测试,把问题定位到,只有从AppStore上下载的才会奔溃,所以只能通过网上查找资料“iOS9.2线上包奔溃问题”,最终定位到P3/16bit资源文件的问题。
奔溃原因
在Xcode8中,如果你的图片资源文件里有16位图或者图片显示模式为P3,并且Deployment Target是iOS9.3以下的就会出现这个问题。
如果你的App需要支持wide color functionality,那你就必须设置Deployment Target为iOS9.3以上。
如果你的APP不需要支持wide color functionality并且你希望兼容iOS老版本,那么你需要将所有16-bit or P3 assets的图片转换为8-bit sRGB assets
解决方案
网上给出的解决方法截图如下
定位P3/bit-16资源文件
1、首先导出项目的ipa包,将ipa包的.ipa后缀名改为.zip;
2、然后解压.zip包,解压后的目录里面会有一个包含着你的 app bundle 文件的 Payload 文件夹;
3、通过终端命令,切换到你的app的Payload文件夹下的 .app bundle 文件夹内:
cd path/to/Payload/your.app
4、用 find 命令定位到 Assets.car 文件 .app bundle
find . -name 'Assets.car'
5、使用 assetutil 命令找到任何包含着 16-bit or P3 的资源文件
sudo xcrun --sdk iphoneos assetutil --info ./Assets.car > ./Assets.json
6、打开上一步生成的 ./Assets.json 文件并查找包含有 “DisplayGamut”: “P3” 或者相关的内容,这段json的”Name”字段对应的值就是16位或显示的γ值为P3的资源文件名。
最后,定位到有问题的资源文件之后,接下来,就是交给设计同事,让设计同事处理一下这些有问题的资源文件就OK了。
以上是关于P3/bit16资源文件导致iOS9.2以下AppStore线上应用奔溃的主要内容,如果未能解决你的问题,请参考以下文章
压缩 css 文件导致 glyphicon 字体无法呈现:资源解释为字体但使用 MIME 类型 text/plain 传输