IOS三人行iOS进阶之路

一张图片引发的iOS8运行崩溃

2016-10-22  本文已影响5550人  iOSPeter

背景:

在项目中偶遇一奇葩问题:APP运行在iOS9、iOS10上以及模拟器上没有问题,运行在iOS8上一打开就闪退

调查问题:

通过Xcode排查,发现有日志输出:

malloc: *** error for object 0x170242490: Invalid pointer dequeued from free list

*** set a breakpoint in malloc_error_break to debug

多次运行,每次都有上边的日志输出,而且crash到main函数,出现EXC_BAD_ACCESS。Exception Breakpoint会指向一个imageNamed:函数,但不是一定的。

问题很怪异,通过崩溃日志锁定几个控制器,我把控制器从项目中注释,问题依旧存在。

没办法只能拿着错误日志找万能的度娘,终于让我发现有网友遇到和我一样的问题:Xcode升级到8,在IOS9和10上运行没问题,在IOS8上运行出错在上边这篇文章的评论里寻根索源找到一篇参考文章:https://www.ianisme.com/ios/2409.html文章里描述的现象跟我遇到的基本是一样的,我就尝试了里边定位到问题图片方法。

解决方法:

步骤1.  在.ipa文件中找到Assets.car拷贝到桌面

步骤2. 打开终端。

步骤3. 运行命令 :sudo xcrun --sdk iphoneos assetutil --info /Users/peter/Desktop/Assets.car > /Users/peter/Desktop/temp/Assets.json

     其中/Users/peter/Desktop/Assets.car是Assets.car的全路径,/Users/peter/Desktop/temp/Assets.json是所有图片信息将要被导入到的一个全路径文件。

步骤4. 打开Assets.json,查找含有”DisplayGamut” : “P3”, “Encoding” : “ARGB-16″的内容。

步骤5.  找到内容的对应的图片名称。如下图:

步骤6. 找到图片money_test(是我截出来的临时图片,不小心放到Assets里了)。

步骤7.  在工程资源文件中找到并删掉这个问题图片(有些时候可能需要改变一下格式即可),然后重新运行APP,发现崩溃问题解决。

总结:一张小小的图片居然能导致整个APP的闪退,这引起了我对APP资源管理的重要性有了一个全新的认识。希望有遇到一样问题的伙伴有个参考。

上一篇下一篇

猜你喜欢

热点阅读