前言
最近升级了Xcode到9.2,玩了一段时间没发现什么问题,前两天用了iOS8.1的机子跑了一下程序,结果惊呆了,部分本地图标显示异常,感觉就像是被扭曲了,一开始以为是屏幕问题(撸多了),结果重跑了一遍还是那样。
先上图
图上的图标有加载本地的也有加载网络的,从网络上加载回来的都显示正常,本地的图标,部分正常。
众所周知,本地图标的存放可以有两个地方,一个是bundle,一个是assets。而在我的项目里,本地图标都是存放在assets里。
分析
简书上,苹果开发论坛上也有人遇到了同样的问题,大家给出来的解决方案是
- 将图标放置在bundle里;
- 用回xcode9.1。
按照1的说法,自己试了一下,确实是可正常显示,可是要真的全部把图标拉到bundle里,这个工作量实在是太大了,而且有个疑问也一直没有得到解答:为什么同样存放在assets里,有些图标可以正常显示而有一些却不能呢,于是,自己尝试着去分析,看能不能解决。
在刚升到xcode8的那时候,不知道大家有没有遇到在ios9.3以下,因为某些图标导致崩溃的问题,如果有,那也应该是相当的无奈吧,我们就遇到过,找了好久才发现是图片的引起的,至于是怎么一回事,可以看看这篇 iOS - Xcode8的(图片格式)assets问题导致运行iOS8崩溃,之所以提起这个,是我怀疑这次也是因为图片的格式或者图片的什么导致xcode9.2下图标显示异常,于是就按照这个来查找问题。
过程
按照上面的疑惑,我把显示正常跟异常的图标单独取出来做了下对比
图片格式
未能正常显示的图标,颜色描述文件标记为iMac
,再看正常显示的图标,虽然简介里没有提及,但是可以通过xcode里查看
sRGB IEC61966-2.1
对比之后有个想法,是不是将颜色描述文件改为sRGB IEC61966-2.1
就正常了呢,先试试吧。
修改颜色描述文件,可以使用苹果自带的软件 ColorSync
应用,保存之后,重新运行
...
...
然而并没有正常显示,这就尴尬了。。。
Assets在打包成ipa之后会生成Assets.car,这里可以查看图标的一些信息,查看之前要先转化为json
sudo xcrun --sdk iphoneos assetutil --info /path/Assets.car > /path/Assets.json
再次对比两图标的信息
没什么异样。。这下就真的尴尬了。
最后
事已至此,似乎说明跟图标的格式没有什么关系,本来是想找设计同事把这两个图标进行对比,但同事已经离职,新接手的同事也找不出什么异样,只知道前后使用的ps版本不一样。这个貌似只能等苹果那边修复了。
为避免审核风险,目前打包重新使用回9.1,希望苹果早日修复这个问题,同时,如果大神知道此中缘由,不胜赐教~