iOS-LaunchScreen.storyboard与LaunchImage导致启动黑屏

iOS13 之后,APP 启动图要求统一使用Launch Screen.storyboard,在提换 launchImage 过程中,发现 APP 启动黑屏,
首先,APP 的启动图片是在首次安装 APP 时储存在缓存中,之后再次覆盖安装等操作是不会清除缓存的, 当在 xcode 调试开发过程中,APP version 变化之后,非常容易出现黑屏现象, 目前总结网上的几个方法:

1.更改启动图名字, 每个版本更改一次图片名字,避免出现 launch和 screen 的字眼

但是这种方法治标不治本,多个分支和多个版本开发时 还是容易出现黑屏

2. 重启手机 (重启 APP 是没用的)

只能保证重启之后是 OK 的

3.图片格式

使用.png 避免使用 jpg

4.工程中的 launchImage 要删除干净

asset 文件中的 launchImage 文件夹要删除


image.png

buildSetting 中搜索 launchImage,然后删除调, 不然工程会报错:None of the input catalogs contained a matching launch image set named "LaunchImage".


image.png

5.启动图在工程中的位置

为解决黑屏,网上不少人说将图片放在工程的根路径下,但是并不能解决问题, 尽量还是放在Assets.xcassets中

6. 删除缓存的启动图片

APP 在首次安装时,会将启动图保存在缓存中,导致后来每次安装都还是调用缓存的图片, 因此在APP 启动时,手动清除一次缓存图片,根本上解决问题:
首先找到缓存目录:
iOS11:/#AppData/Library/Caches/Snapshots
iOS13:/#AppData/Library/SplashBoard/Snapshots
iOS14:/#AppData/Library/SplashBoard/Snapshots


image.png

代码实现清除缓存图片:

- (void)clearLaunchScreenCache {
    @try {
        NSError *error;
        [[NSFileManager  defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/Library/Caches/Snapshots",NSHomeDirectory()] error:&error];
        if (error) {
            NSLog(@"删除cache失败 %@",error);
        }
    } @catch (NSException *exception) {
        NSLog(@"删除cache失败: %@",error);
    } @finally {
        NSLog(@"成功");
    }
}

具体调用位置,请自行决定!