问题描述:我们在修改launchScreen之后,发布到App Store发现加载的依旧是旧的launchScreen内容。只有删除APP重新安装才会更新。
寻找资料,发现了一个解决方案,记录一下。
猜测每次运行APP时launchScreen会生成个缓存,只要有缓存就会从缓存中读取,并不会使用新的launchScreen内容,而且如果不删除app,该缓存会一直存在。
后来发现在应用程序的沙盒中的Library文件夹有一个名为SplashBoard的文件夹,该文件夹是启动屏幕缓存的存储位置。
因此,要完全清除应用程序的启动屏幕缓存,需要做的就是删除缓存。
文章提到的缓存目录在沙盒下如下图所示:
我现在策略是每次有新版本的时候,删一次launchScreen的缓存,代码如下:
#pragma mark - 检查是否需要清除launchScreen 缓存
+ (void)checkLaunchScreenCache
{
NSString *version = [[ZMKeyedArchiverManager manager] unarchiveObjectForKey:@"launchScreenVersion"];
if (![version isEqualToString:APP_VERSION]) {
[[ZMKeyedArchiverManager manager] archiveObject:APP_VERSION forKey:@"launchScreenVersion"];
[self clearLaunchScreenCache];
}
}
+ (void)clearLaunchScreenCache {
// 异步删除缓存
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSError *error;
[NSFileManager.defaultManager removeItemAtPath:[NSString stringWithFormat:@"%@/Library/SplashBoard",NSHomeDirectory()] error:&error];
if (error) {
NSLog(@"Failed to delete launch screen cache: %@",error);
}
});
}
如果该方案有问题,或有更合理的方案欢迎指正讨论。
参考:
在iOS上清除APP的启动屏幕缓存
# Quick tip: clearing your app’s launch screen cache on iOS