iOS关于SIGSEGV错误及处理方法

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


SIGSEGV.png

SIGSEGV是Signal(信号)的一种,即:程序无效内存中止信号。一般多是因为内存不合法。
想要了解更多的小伙伴可以看下这篇文章 iOS异常捕获

再次查看了下历史版本中的异常日志,发现并没有这个异常,说明是这次更新新增的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”

iOS关于SIGSEGV错误及处理方法_第1张图片
json.png

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

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

你可能感兴趣的:(iOS关于SIGSEGV错误及处理方法)