背景:
有同事反馈,iOS9.0的机子,开机必挂。
现象:
1.iOS9.0真机,下载release包,开机几乎必挂,偶尔可以使用几秒,也会挂
2.Crash log完全随机,最后挂的地方都是Objc_msgSend处挂,任何地方都可能会引起挂
3.Debug模式,真机联调不挂
过程:
由于只有release包才挂,最后只能使用二分法,不停的缩小Crash范围,不停打包,最后确定了一个业务代码库。
其实一开始查到的时候,也是无法理解,因为是业务代码,冷启动过程根本没有任何代码的执行,为何会触发Crash。
最后只能继续使用二分,依次打包,最后发现,图片资源引起了Crash问题。
找到原因:
仔细分析了这些图片的特性,发现都是16bit-P3的wide color图片,通过这个线索搜索,发现了iOS10支持的wide color,基本确定是iOS9对于这类图片的支持不足。
在深入查询的过程中,终于搜到了一篇StackOverflow的文章,基本解释了这个Crash:
https://stackoverflow.com/questions/39404285/xcode-8-build-crash-on-ios-9-2-and-below
原因解释:
基本可以解释为XCode8编译下,iOS9.3以下的系统,不能支持wide color图片。
解决方案:
所有wide color图片换为8bit sRGB图片。
相关链接:
https://stackoverflow.com/questions/39404285/xcode-8-build-crash-on-ios-9-2-and-below