iOS更换启动图异常问题处理
背景:应苹果要求,目前工程项目启动页均改为LaunchScreen.storyboard,最开始使用没问题,但更换了启动图时,因为系统启动图奇怪的缓存机制,这时候就会遇到启动图还是老图的问题,很离谱的是,这问题几年前就有人提出,但官方一直没有处理,总结下来就是更换启动图不生效,需要如何处理。
个人觉得有问题的方案:目前我看到的大多数解决办法,都是将assets的启动图片放在文件目录下,启动图更换后需要改个文件名(比如以前的是launch1,新的改为launch2),然后在合适的时机(比如启动时判断版本号,如果版本号和上一次的不一致时,但这个时机有个弊端,第一次启动还是老图,第二次才能正常)清除一次SplashBoard/Snapshots缓存。说说有问题的原因,因为SplashBoard/Snapshots缓存是系统自己生成,目前我没找到官方的使用指南,相当于是做的骚操作来规避这个问题,后续如果系统改了逻辑,会引发不可预测的异常。
1import UIKit
2
3public extension UIApplication {
4
5 func clearLaunchScreenCache() {
6 do {
7 try FileManager.default.removeItem(atPath: NSHomeDirectory()+"/Library/SplashBoard/Snapshots")
8 } catch {
9 print("Failed to delete launch screen cache: \(error)")
10 }
11 }
12
13}
14
15调用:UIApplication.shared.clearLaunchScreenCache()
16
相对靠谱的方案:上个方案因为私自清除了SplashBoard/Snapshots缓存,可能会引发不可预测的异常,那么有没有办法可以不清除缓存,又能更新启动图呢。答案是有的,将LaunchScreen.storyboard改个名称,不要用系统默认的,比如xxxLaunchScreen.storyboard,再将assets的启动图片放在文件目录下,启动图更换后改个文件名,当然不要忘了将自己的启动文件改为新的xxxLaunchScreen.storyboard,这样就能成功换图。

此方案所处理的都是常规操作,更加稳定,并且这样设置后,更换启动图后首次就能生效,美中不足的是每次换图都需要给启动图改个名字,如果团队过大,谁一不小心很有可能就忽略了,这就需要各团队出个规范或者用自动化工具来避免此问题。