iOS-launchScreen

问题描述:我们在修改launchScreen之后,发布到App Store发现加载的依旧是旧的launchScreen内容。只有删除APP重新安装才会更新。
寻找资料,发现了一个解决方案,记录一下。

猜测每次运行APP时launchScreen会生成个缓存,只要有缓存就会从缓存中读取,并不会使用新的launchScreen内容,而且如果不删除app,该缓存会一直存在。
后来发现在应用程序的沙盒中的Library文件夹有一个名为SplashBoard的文件夹,该文件夹是启动屏幕缓存的存储位置。
因此,要完全清除应用程序的启动屏幕缓存,需要做的就是删除缓存。
文章提到的缓存目录在沙盒下如下图所示:

image

我现在策略是每次有新版本的时候,删一次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

推荐阅读更多精彩内容