一、源起
从2020年以后,苹果公司开始禁止使用lunchImage.进行开屏启动,这样的话,对于从业者的我们只能选择通过使用lunchScreen.xib或者lunch.storyboard.来展示启动页。
二、问题
这样通过xib来设置启动页的话,避免不了会遇到适配的问题,这里我们先不聊适配这个话题。今天要说的是缓存的问题。 因为这个启动页,会因为需求而改变,甚至直接换成另一套启动图。当我们手动在xib中去改动这些的时候,这时候问题便出现了。
三、后果
每当我在我的iOS应用程序中修改了启动屏幕LaunchScreen.storyboad中的某些内容时,我都会遇到一个问题:系统会缓存启动图像,即使删除了该应用程序,它实际上也很难清除原来的缓存。
有时我修改了LaunchScreen.storyboad,删除应用程序并重新启动,它显示了新的LaunchScreen.storyboad,但LaunchScreen.storyboad中引用的任何图像都不会显示,从而使启动屏幕显得不正常。
四、解决方法
今天,我在应用程序的容器中进行了一些挖掘,发现该Library文件夹中有一个名为的文件夹SplashBoard,该文件夹是启动屏幕缓存的存储位置。
因此,要完全清除应用程序的启动屏幕缓存,您所需要做的就是在应用程序内部运行以下代码(我已将该代码打包到UIApplication的扩展中):
文章提到的缓存目录在沙盒下如下图所示:
OC代码,创建一个UIApplication 的 Category
#import <UIKit/UIKit.h>
@interface UIApplication (LaunchScreen)
- (void)clearLaunchScreenCache;
@end
#import "UIApplication+LaunchScreen.h"
@implementation UIApplication (LaunchScreen)
- (void)clearLaunchScreenCache {
NSError *error;
[NSFileManager.defaultManager removeItemAtPath:[NSString stringWithFormat:@"%@/Library/SplashBoard",NSHomeDirectory()] error:&error];
if (error) {
NSLog(@"Failed to delete launch screen cache: %@",error);
}
}
@end
OC使用方法
在Appdelegete 的didLunch函数中直接调用 清楚每次的缓存
#import "UIApplication+LaunchScreen.h"
[UIApplication.sharedApplication clearLaunchScreenCache];