iOS解决问题过程剖析

作者: Somerr态 | 来源:发表于2017-09-19 15:44 被阅读168次

    一、前言

    文章主要讲解自己亲身经历的一个奇葩问题的处理全过程:

    Xcode8打包发布后iOS9.0~9.2机型闪退
    永无止境

    就在几个月前,在公司发布更新app后,很快通过了苹果的审核,本来很高兴,这下该解决的bug也解决了,新功能也上线了,可以涨工资了,哇哈哈!!!
    突然,微信里面收到腾讯Bugly发过来的消息提醒(项目集成了Bugly,主要是监测崩溃率,上报崩溃日志),说我的应用崩溃率波动异常大,此时的我心中有一万个草泥马在奔跑,赶紧打开Bugly看崩溃日志,经过一番排查定位,最终确定新版本的崩溃全部发生在了iOS 9.0 ~ 9.2之间,哥们我赶紧拿出所有测试机(也只有iOS 7.1/9.3.5/10.1三部手机),用代码跑没问题,从App Store下载更新也没问题。找遍全公司,幸好有个小妹妹的古老的iPad 系统是9.1,二话不说夺了过来,赶紧用代码运行跑起来,哎哟握草,不会崩溃啊,一脸懵逼!!!换个思路,直接从App Store下载下来,好了,见证奇迹的时刻来了,哎哟,我一启动app,卡着不动,大约10s之后果断闪退,此时的我泪流满面啊,果然崩溃发生在iOS 9.0 ~ 9.2。
    你以为问题就解决了么?这只是定位到了问题,问题出在哪然而还是一脸懵逼,为什么会这样,然后开始疯狂搜索。。。

    二、崩溃原因

    在Xcode8中,如果你的图片资源文件里有16位图或者图片显示模式为P3,并且Deployment Target是iOS9.3以下的就会出现这个问题。(话说项目里面就是因为一张小小的图片,导致了这次崩溃,不知道设计师是怎么弄出来的这个特殊图片…)如果你的App需要支持wide color functionality,那你就必须设置Deployment Target为iOS9.3以上。如果你的APP不需要支持wide color functionality并且你希望兼容iOS老版本,那么你需要将所有16-bit or P3 assets的图片转换为8-bit sRGB assets。
    此前图片资源都是放在另外的文件夹里面的,而这个版本特意整理了项目的文件夹,把图片资源都放到了image.xcassets了,这一移动导致这个问题的出现。

    三、定位问题图片

    1. 打一个ipa包,解压你的应用的ipa包,进入到你应用的Playload文件夹。
    2. 用find命令定位到Assets.car文件
    find . -name 'Assets.car'
    
    1. 使用 assetutil 命令导出图片的信息存储到Assets.json文件中
    sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json
    
    1. 打开刚才生成的Assets.json文件,查找含有”DisplayGamut” : “P3”, “Encoding” : “ARGB-16″的内容。这个对应的Name就是出现问题的图片了。
    {
        "SizeClass Vertical" : "universal",
        "Graphics" : "GLES2,0",
        "Name" : "ianisme.com",
        "Scale" : 2,
        "Idiom" : "universal",
        "Memory" : "512MB",
        "LayoutDirection" : "0 - Horizontal",
        "DisplayGamut" : "P3",
        "Encoding" : "ARGB-16",
        "SizeClass Horizontal" : "universal",
        "Image Type" : "kCoreThemeOnePartScale",
        "AssetType" : "Image",
        "Subtype" : 0,
        "EdgeInsets" : "top:0 left:0 bottom:0 right:0"
      }
    

    四、转换图片为8-bit sRGB assets格式

    找到这个图片,然后Command+i 查看这个图片的信息,发现这个出问题的文件的颜色描述文件有问题,和别的图片文件不一样。

    问题图片 其它正常图片

    使用ColorSync实用工具将这个描述文件修改如下:


    指派它的描述文件为sRGB IEC61966-2.1,保存。

    最后打包重新加急审核。。。第二天,审核通过,下载安装没有问题。

    五、总结

    这次的问题若不是及时发现,将会会导致大面积用户无法正常使用app,从而升级成一次严重事故。幸运的是问题及时解决了,很感谢小妹妹的救命iPad。所以,遇到问题不必惊慌,只要按照正常思路,发现问题,寻找规律、定位问题、直到找到解决办法。

    此外还要感谢以下技术大牛:

    http://www.tuicool.com/articles/meiMZze

    顺便附上一片app性能检测的文章:

    https://mp.weixin.qq.com/s/e-UDC_j9LZX5_YDG4s0-gg

    相关文章

      网友评论

        本文标题:iOS解决问题过程剖析

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