场景是这样的,同事说他遇到一个大坑,如果你的.ipa的包中包含有16-bit或者P3格式的图片,会有一个很蛋疼的问题。使用Xcode8打包上线,iOS9.3以下版本的手机,运行一会就随机在任何页面崩溃了。
这个时候
你用Xcode直接刷机器<iOS9.3以下版本>测试,木有问题,
模拟器<iOS9.3以下版本>运行木有问题,
打包传到蒲公英或者其他途径,安装到真机上<iOS9.3以下版本>,木有问题。
但是,但是,就是上线之后有问题了。
看到这,我就懵逼了。
不过幸好,使用testFlight安装在iOS9.3以下版本还是能够复现的。
1、将.ipa的后缀名修改成为.zip
2、显示包内容找到 Assets.car
3、终端命令进行解析
sudo xcrun —sdk iphoneos assetutil —info /Users/morris/********/Payload/Demo.app/Assets.car > /tmp/Assets.json
后面的文件路径可以写其他的。
4、找到生成的 <code>/tmp/Assets.json</code>
全局搜索关键字 <code> P3</code>,和关键字 <code>BitsPerSample" : 16</code>
如果找到的话,根据关键字的name在项目中找到该图片。
根据相关的比较,图片的格式是这样的:
两张图片都是png格式的图片。
注意那个颜色空间,UI平常给我们切的图一般的颜色控件是RGB的。
实际图片进行对比:
灰度图:
灰度图转化成RGB图:
转化成RGB之后的图片:
具体的原因:
在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
如有失误请各位路过大神即时指点,或有更好的做法,也请指点一二。
相关的参考资料:
http://blog.csdn.net/wangletiancsdn/article/details/72901488
https://stackoverflow.com/questions/39404285/xcode-8-build-crash-on-ios-9-2-and-below