事由
由于改版需求需要更换掉原来的启动图,但是在这个过程中却出现了奇怪的问题,就是启动图的图片修改后,发现启动的时候,启动图片并没有发生改变,这是什么原因呢?即使删除应用再重新安装,依然无效!
检查验证
是不是由于老图片还存在造成的?仔细检查后,包内的老图片确实已经被删除。那很可能的原因就是手机系统缓存了应用的启动图,并且在应用更换图片后,由于某种原因系统依然使用老的已缓存的图片。后来经过验证,删除应用,再重新启动手机,再安装应用,此时启动图才更新成新的启动图。
分析原因
苹果为应用提供了两种设置启动图的方式,LaunchScreen和LaunchImage。iOS 8 以前的应用不支持LaunchScreen。使用LaunchImage会不会出现这个问题,目前没有试验过,可能是没有这个问题的。现在只说一下我使用LaunchScreen.storyboard的情况。
在网上查了资料,使用LaunchScreen的情况下,出现启动图不能更新,可能是由于,系统缓存了启动图的截屏,并且会根据启动图的名字确定会不会刷新启动图的缓存。
目前已知的可行办法是,启动图不要放在Assets.xcassets里边(放在Assets.xcassets里边如果更改了启动图Set的名字,会出现启动的时候白屏),启动图放到外边的文件夹下,并且每次更新启动图的时候使用不同的名字,这样每次更换启动图后就,启动的时候就会使用新的启动图。
如果之前使用的是LaunchScreen,之后换成LaunchImage,那LaunchImage设置的启动图一定是无效的,因为LaunchScreen的优先级高于LaunchImage,没有什么好的解决办法,除非删应用,重启,重装应用。
结语
这个问题应该是苹果的一个Bug导致应用内更新启动图片后,应用启动时候不能及时更新启动图。这一块具体内部的实现并不清楚,不过好在找到了合适的解决办法。