美文网首页IOS三人行iOS进阶之路
一张图片引发的iOS8运行崩溃

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

作者: iOSPeter | 来源:发表于2016-10-22 14:54 被阅读5550次

    背景:

    在项目中偶遇一奇葩问题: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资源管理的重要性有了一个全新的认识。希望有遇到一样问题的伙伴有个参考。

    相关文章

      网友评论

      • 沐浴汐:我在真机上和模拟器上都出现这个问题是怎么回事呀
      • _阿南_:我也一直碰到类似的问题,最后找到的问题是个推的SDK引起的问题。更新到最新的版本就没有这个问题了。

        ==========================================

        最新版本:1.6.4.0
        发布日期:2017-06-15

        ==========================================

        更新说明:
        1.优化网络安全协议。
        2.修复 iOS10 上点击统计异常。
        3.解决在模拟机运行环境偶现 crash 问题。

        ==========================================

        个推官网:www.getui.com
        个推开放平台:dev.getui.com
        客服QQ:2880983152
      • 曦曦灬:sudo xcrun --sdk iphoneos assetutil --info 请问下.我为什么用这个命令转的 json 文件是空的.
        iOSPeter:@曦曦灬 就是说这个问题已经被解决了是吧?这种错误导致原因比较多,比较难定位
        曦曦灬:@XD_Peter 但是确实更换对应的图片之后就可以了,而且这个问题是线上版本出现的.我直接去应用商店下载的线上版本的包
        iOSPeter:说明你的程序不是图片格式导致的。
      • 没得到的是你没遇到呢:我在模拟器上运行项目完项目做任何操作都崩溃 崩在main函数 我按照你的方法找了! 没有那种图片! 它也不给我打印报错(最气人的地方:boom: )我测试了一下只有8.1和8.3的模拟器会崩!请问遇到过这种问题吗?
        ArchLL:请问你问题解决的吗,我的问题和你一样,具体那几个版本崩溃我没尝试,不过在模拟器上也会crash,打了断点,我按文章的方法检测了我的图片,也没有问题,请问你是怎么解决的?
        没得到的是你没遇到呢:@XD_Peter 打全局断点也蹦在main函数没用!只在8.几的系统上模拟器会出现
        iOSPeter:既然项目可以运行起来,通过断点的方式也可以找到哪里崩溃了呢,打个全局断点。
      • 7e539b6825c3:写得很好,可是我没有找到这种图片,我是打开相册的时候,就崩溃到这个问题上,而且是随机崩溃,没有规律,请问这种问题该怎么解决?
        iOSPeter:@Brocadecarp 很多问题都可能导致这个报错,日志太简单不好排查,建议先把现象在网上搜一搜,多看看类似的问题。更换真机和模拟器在不同的iOS系统运行,看问题是必现的还是出现在某一机型或者某一系统,这样才能好好排查自己的问题。
        7e539b6825c3:Pet(11725,0x700000429000) malloc: *** error for object 0x60800023e260: Invalid pointer dequeued from free list
        *** set a breakpoint in malloc_error_break to debug
        iOSPeter:方便的话把日志贴出来看看

      本文标题:一张图片引发的iOS8运行崩溃

      本文链接:https://www.haomeiwen.com/subject/pvhhuttx.html