近期我们的程序总是在IOS 9.0~9.3之间的系统版本上边发生崩溃,还总是莫名其妙的崩溃,从集成的腾讯Bugly上边查看崩溃日志,总是显示
类似于这样的崩溃日志,数字可以不同,显示的崩溃的现在在main函数,由于公司的苹果手机都不是9.1,和9.2.1的系统,并且在模拟器上边完全没有问题,这就比较蛋疼了,完全无从搞起。最后从网上研究好多东西,终于找到是由于P3图片的问题,造成的崩溃
接下来就是如何查找自己项目里面的P3或者16位的图片了,
查找方法是:
1.创建一个程序的.ipa文件
2.将此.ipa文件修改为.zip的文件
3、解压此.zip文件,将生成一个Payload文件,包含一个含有你程序的一个文件
4、打开终端,cd到那个你的程序的那个文件,或者直接拖动那个程序文件到终端
5、使用find 命令定位到Assets.car文件
find .-name 'Assets.car'
6、使用assetutil 命令找到包含P3 或者16位的资料文件, 对此Assets.car执行以下命令
sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json
注:将黑体字部分替换成第五步查找到的返回值,不能使用这个
7、打开上一步生成的/tmp/Assets.json文件,在终端输入 open /tmp/Assets.json;
对应的就会打开一个文件
然后查找 BitsPerComponent 字段,值是8的是正常的,是16的就是不正常,还有就是查找DisplayGamut字段,值为P3的就业是不正常的,
8、把所有不正常的图片全部替换掉,就能完美解决了
9、在不替换图片的情况下,来修改图片解决,网上看的有两种方法,但是我只用了一种,另一只没用
第一种、下面我们使用ColorSync实用工具将这个图片文件修改下找到这个图片然后按照下面方法
最后点击应用就好了。
第二种方法,
这里我们使用bash script直接处理所有图片为正确格式,这样我们就不用去定位是哪个图片的问题了,或许更方便一些。
#!/bin/bashDIRECTORY=$1
echo"------------------------------"
echo"Passed Resources with xcassets folder argument is <$DIRECTORY>"
echo"------------------------------"
echo"Processing asset:"
XSAASSETSD="$(find "$DIRECTORY" -name '*.xcassets')"
for xcasset in $XSAASSETSD
do
echo"---$xcasset"
IMAGESETS="$(find "$xcasset" -name '*.imageset')"
for imageset in $IMAGESETS
do
echo"------$imageset"
FILES="$(find "$imageset" -name '*.png')"
for file in $FILES
do
echo"---------$file"sips -m"/System/Library/Colorsync/Profiles/sRGB Profile.icc"$file--out
$file
done
done
done
echo"------------------------------"
echo"script successfully finished"
echo"------------------------------"
第二种方法纯属copy大神的,我自己没有使用过。希望对你有用。