iOS9.0-iOS9.2真机包随机Crash问题

背景:

有同事反馈,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

推荐阅读更多精彩内容