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 传输

P3图片导致iOS9.3以下崩溃问题

福利来了,各种技术视频资源

iOS App 瘦身方案

资源所有者密码凭据令牌在 Azure Function App 上导致 401

App Thinning