Xcode9.2 编译在iOS8.1 系统上图片显示异常

最新消息

目前 xcode 9.3 已经解决了该问题

Asset Catalog
Known Issues
When using Xcode 9.2 to create apps that deploy to iOS 8 and later, images in the asset catalog may be corrupted when viewed on devices running iOS 8.3 and earlier. (35379713)
Workaround: Build the app using Xcode 9.1, or use Xcode 9.2 and set the deployment target to iOS 8.4 or later.


趁着下载 Xcode 9.1 的空隙,在周末的早晨记录一下这个坑,希望能解决相同遭遇同行的困惑。

始因

昨天刚发布了适配 iPhone X 的最新版本,之所以使用 Xcode 9.2 打包,是因为早期的适配,通过 Xcode 8.2 打包,安装到 iPhone X 上显示的效果是没有适配。

这个也是无法解释的,我们开发使用的 Xcode 9,在适配过程中没有遇到该问题,总是升级就对了。

刚好最近苹果爹发布了 Xcode 9.2,就索性升级到最新版本。

持续化集成就是方便,代码提交以后,喝杯咖啡的工具,就上传成功,等待审核。

也就是在昨天中午,收到审核通过的提醒,很奇怪,这个时候应该是他们休息的时间。

然后,就非常肯定,因为在适配的过程中,特意找了两个 iPhone X 的用户帮助测试体验。随着审核通过,就很快发布出去。

问题

大概下午3点钟,距离发布版本只过了 3 个小时左右。收到客服妹子的一个大写的问号。

这一瞬间,整个人都是懵的,慌忙让用户重启 APP,重启系统,升级系统,最后被用户拒绝掉。

既然是必现的问题,不能将问题推到升级系统上,该解决还是要尽快解决的。

接着就开始着手另外一个项目,晚上回到家开始思考,问题存在的版本近期究竟改了什么内容。同时也下载了 iOS8.1 的模拟器,使用最新版本的 Xcode 运行看了下效果,确实如此是复现的。

所以,要马上改变态度,和客服同志搞好关系,早点认错才能走得更远。

回忆

1. 删掉LaunchScreen.sb 文件

为了适配 iPhone X 的启动图,同时在启动后使用启动图做了简单的效果,决定使用 LaunchImage 的方式设置启动图。

在更改代码后,尝试了一下修改结果,依然是非正常的。

效果如下,丝毫没有改变:

2. Xcode 版本升级

这次的改动比较小,所以在排除上述的改动后,直接想到的就是可能就是这个问题,但是很少会怀疑苹果爹会挖这么大的坑,让开发者跳进去。

不管如何,降级版本试试就知道是不是这个原因。

Xcode9.2Xcode9.1
修改前修改后

通过上述对比,确定问题就处在 Xcode 版本上。

解决方案

1. 等苹果爹更新

如果苹果爹一直没注意到这个问题,或者没有人提,谁知道还要等多久?
关于此问题,我已经向苹果爹提交了 bug,期待后续修复:

ProblemID=35948702

2. 先降级 Xcode

确切的说,这是目前最快捷的一个方式,保证没有问题

3. 改变图片资源存储

图片不要放在 asset 里面,方法放在bundle 里面就没问题。不知道是 Xcode9.2 bug 还是没设置相关属性

4. 资源问题优化

换成9.1,不过我发现 @2x, @3x 这三个图标都填满的就没这 BUG,只放一个才有

参考链接

请我喝杯咖啡吧~