首先这是小编的第一篇文章,我是一名做iOS开发的小白,出于爱好会更新发表些相关的技术文章,偶尔也会发些视频。恳请大家不要去嘲笑一个努力的人,要是做的不好请多多评论,反正我也不改。
好了!敲黑板!!说正题
是这样,前一阵我本来在开开心心的对着项目输出我的奇淫技巧,但是突然有个员工说自己的app有问题,更新版本后再一运行就莫名其妙的崩溃。这让我很惊讶,因为这不符合道理!在没法干掉那个员工的情况下,我只好直面这个bug。
经过我的真机测试,发现并没有这个问题出现。我查看了崩溃日志,发现断点处代码都不在关键点上,于是就请求了苹果的技术支持(一年就两次,多了花钱)。苹果的技术支持不愧是货真价实,回复的干脆:看文档!
哦。。。嗯?先不说文档那么一大块,还是全英文的。当然了,虽然在你们看来英文的文档根本没法看,但在我们搞开发的程序猿来说,尤其是我,那也是一脸懵逼。
于是乎我只能慢慢搜索问题,经过各种查证发现是一张图片有了问题。图片如果是16位或者P3的色域,就会在并且只在iOS 9.2.1系统下崩溃(显然这个系统是有毒的)。
发现自然就能解决,先打一个ipa包并解压,使用终端输入:cd path/Payload/XXX.app,path就是你的路径了。
接着使用find:find . -name 'Assets.car'。
接着使用 assetutil 命令导出图片的信息存储到Assets.json文件中:sudo xcrun --sdk iphoneos assetutil --info/path/to/a/Assets.car> /tmp/Assets.json 把path替换成刚才find下的结果。
打开刚才生成的Assets.json文件,查找含有”DisplayGamut” : “P3”, “Encoding” : “ARGB-16″的内容。这个对应的Name就是出现问题的图片了。
这里我建议直接让美工重新做一张图片,这样没有任何问题了,但也可以直接修改问题图片。
这样我们就不用去定位是哪个图片的问题了,或许更方便一些。
这里我们使用bash script直接处理所有图片为正确格式:
好了,这个问题到这里还是有没解决的话,就可以跟老板说苹果这个系统有问题,不是咱们的锅。