在开发中,经常会遇到一些崩溃问题,也就是Crash,绝大部分我们都可以定位具体的代码,进行解决,但是总会遇到一些我们无法解决的Crash,我们无法定位具体的代码行,无法解决相关的Crash,让人很是困惑!下面我将就我自己项目中遇到的一个Crash做一下说明。
大家平时使用最多的崩溃手机,项目统计埋点手段应该要数友盟和Bugly,我们可以收集到崩溃信息,但是我们无法解读定位,
例如我们有时候会在友盟上收集到这样的崩溃信息:Application received signal SIGSEGV或者Application received signal SIGBUS。
具体如下图所示:
当使用定位工具进行解析的时候,解析出的结果很让人费解。
原因:
如果发生Crash的手机系统为9.3之前,那么崩溃的原因可能是您的项目iPa包中使用了广色域图的原因,因为9.3之前的系统版本是不支持广色域图的,如果您必须使用广色域图的话请将系统版本支持改成9.3+,如果非必须使用广色域图,可将资源包中广色域图替换即可。
解决方案:
首先你要知道什么样的图片才是广色域图。
右键图片-显示简介-如下图所示:
你会看到图片有一个颜色描述文件,这样的图片就是广色域图。
您的项目中有那么多的资源图片,一张一张去找是不是会很麻烦,那如何快速有效的找到广色域图。
步骤:
1.导出iPa包.
2.定位到该ipa文件修改后缀名.ipa 为 .zip.
3.解压该 .zip 文件. 解压后的目录里面会有一个包含着你的 app bundle 文件的 Payload 文件夹.
4.打开终端病cd到你的app的Payload文件夹下的 .app bundle 文件夹内,形式如下:
//路径(直接拖拽文件到终端)
cd path/to/Payload/your.app
5.用 find 命令定位到 Assets.car 文件 .app bundle , 形式如下:
find . -name 'Assets.car'
6.使用 assetutil 命令找到任何包含着 16-bit or P3 的资源文件(广色域图)
sudo xcrun --sdk iphones assetutil --info Assets.car> /tmp/Assets.json
输入命令运行之后会提示输入密码(隐式输入)
7.打开json文件
open /tmp/Assets.json
这一步之后会打开json文件,对json文件搜索即可。关键字:“DisplayGamut”: “P3”或者”BitsPerSample” : 16 都是不正常的图片,需要更换。与UI沟通,关闭通道即可!
这个Crash问题,直接手机安装无法发现之后上传APPStore才可以发现,可以使用TestFlight内侧发现
以上即为解决方法,如果方法可行欢迎收藏、喜欢、关注等!