iOS关于SIGSEGV错误及处理方法

新版本上架后,日常查看Bugly上的异常反馈,发现一个排名第一的问题,

image.png

SIGSEGV是Signal(信号)的一种,即:程序无效内存中止信号。一般多是因为内存不合法。 再次查看了下历史版本中的异常日志,发现并没有这个异常,说明是这次更新新增的bug。 关于crash分析,可以看下 iOS崩溃crash大解析

一顿操作过后还是没有发现异常在哪里,打开Google,在 Stack Overflow 看到一篇看似很滑稽的原因:工程中的图片资源中存在P3颜色空间或16bit的图片。 是不是很懵逼!!!

懵逼的同学查看 计算机色彩

解决方案:

1.将工程打包ipa并导出;

2.将导出的ipa文件后缀名改为.zip后解压;或是右击选择打开方式,选择“归档实用工具”打开。解压后有一个Payload文件夹,该文件夹中是你的app bundle;

3.打开终端,直接cd到对用的app

cd path/to/Payload/your.app
复制代码

4.使用查找工具在.app包中查找assets.car文件

find . -name 'Assets.car'
复制代码

5.使用AssetUtil工具在查找到的每个assets.car文件中查找任何16位或P3资源,并生成Assets.json文件

sudo xcrun --sdk iphoneos assetutil --info /path > /tmp/Assets.json
复制代码

其中将命令中 /path 替换成第4步查找到的 assets.car 文件地址

6.使用open命令打开第六步生成的Assets.json

open /tmp/Assets.json
复制代码

7.在文件中搜索“P3”或“16”

image.png

其中“Name”对应的名称“save_icon”就是工程中图片的名字,将图片删除后让美工重新切一张符合要求的图片导入即可!

注意:一定要让美工重新切,因为我发现问题的图片就是我自己在iconfont下载的,吐血!!!

猜你喜欢

转载自juejin.im/post/7073293518378106917