关于特殊的SIGSEGV引起的程序崩溃

近期我们的程序总是在IOS 9.0~9.3之间的系统版本上边发生崩溃,还总是莫名其妙的崩溃,从集成的腾讯Bugly上边查看崩溃日志,总是显示

关于特殊的SIGSEGV引起的程序崩溃_第1张图片

类似于这样的崩溃日志,数字可以不同,显示的崩溃的现在在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的就业是不正常的,

关于特殊的SIGSEGV引起的程序崩溃_第2张图片

8、把所有不正常的图片全部替换掉,就能完美解决了

9、在不替换图片的情况下,来修改图片解决,网上看的有两种方法,但是我只用了一种,另一只没用

第一种、下面我们使用ColorSync实用工具将这个图片文件修改下找到这个图片然后按照下面方法


关于特殊的SIGSEGV引起的程序崩溃_第3张图片

最后点击应用就好了。

第二种方法,

这里我们使用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大神的,我自己没有使用过。希望对你有用。

你可能感兴趣的:(关于特殊的SIGSEGV引起的程序崩溃)