iOS巅峰之系统iOS9.3以下从App Store下载的应用就奔溃

一、前言

如果你刚刚升级了Xcode8,而你的项目的Deployment Target是iOS 9.3以下,运行iOS8的时候过了几十秒后crash到main函数,出现EXC_BAD_ACCESS,或者崩溃到imageNamed:,或者每次编译运行随机崩溃到某个地方。那么恭喜你,你读完这个文章你可能就解决了。

二、崩溃原因

在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

三、定位到问题图片

1.找到导出项目的ipa文件;
2.对该ipa文件使用解压工具解压,或者直接修改后缀名.ipa为.zip后直接解压该文件;
3.解压后会有里面会有Payload文件夹,点击Payload文件里面有你的APP文件;
4.打开终端,进入到你的APP的Payload文件夹下的.app bundle文件夹内(打开终端,输入 cd 拖入Payload文件夹里面的文件,回车cd 文件目录/Payload/your.app);
5.在终端里,用find命令找到Assets.car文件(find . -name 'Assets.car'
6.使用 assetutil 命令导出图片的信息存储到Assets.json文件中
sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json
注意:/path/to/a/Assets.car 替换成find . -name 'Assets.car'获取到的路径
7.前往文件夹 打开刚才生成的Assets.json文件,查找含有”DisplayGamut” : “P3”, “Encoding” : “ARGB-16″的内容。这个对应的Name就是出现问题的图片了。

Name:是图片的名字, 将找到的图片发给UI重新设计就ok了

猜你喜欢

转载自blog.csdn.net/qw656567/article/details/81131908