根據(jù)蘋果要求2020年4月之后上線的APP都必須使用LaunchScreen適配啟動圖,在研究的過程中發(fā)現(xiàn)還是有一些坑的,記錄一下。
環(huán)境: Xcode 11.3 + iPhone 11 + iOS 13.3
使用LaunchScreen設置啟動圖運行,之后更新圖片內容,發(fā)現(xiàn)運行仍然是舊的圖片。也試過網(wǎng)上的改名字、刪除sb再新建、卸載重裝、卸載+重啟后重裝,只有最后一項是每次都是正確的,前幾項大多數(shù)情況下還是錯誤的。
使用模擬器測試發(fā)現(xiàn),只有在全面屏時會更新失效。
以下路徑只在iOS 13系統(tǒng)下測試,其他設備的路徑未測試。建議執(zhí)行下面操作時每個版本只執(zhí)行一次,否則不知道會不會出現(xiàn)黑白屏之類的情況。測試的時候沒有執(zhí)行下面代碼,僅僅是頻繁更換啟動圖就會出現(xiàn)黑白屏。
1.直接刪除截圖存放的路徑目錄
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/SplashBoard/Snapshots"];
[[NSFileManager defaultManager] removeItemAtPath:path error:nil];
可能有些莫名的情況下會會出現(xiàn)黑白屏,這時候使用1方法并不能完美解決,使用下面的2方法測試,即時是出現(xiàn)了黑屏,替換之后也可以顯示正常。
2.替換截圖目錄下文件
// 獲取截圖存儲路徑
NSString *bundleID = [[NSBundle mainBundle].infoDictionary objectForKey:@"CFBundleVersion"];
NSString *shotsDirName = [bundleID stringByAppendingString:@" - {DEFAULT GROUP}"];
NSString *shotsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/SplashBoard/Snapshots"];
shotsPath = [shotsPath stringByAppendingPathComponent:shotsDirName];
NSError *readError = nil;
NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:shotsPath error:&readError];
// 遍歷該目錄下截圖文件
for (NSString *fileName in files) {
NSString *path = [shotsPath stringByAppendingPathComponent:fileName];
NSError *error = nil;
NSData *data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedIfSafe error:&error];
if (!error && [data length]) {
UIImage *image = [UIImage imageWithData:data];
if (image) {
UIImage *launchImage = [UIImage imageNamed:@"launch"];
// 設置圖片尺寸為舊圖尺寸
launchImage = [launchImage imageByResizeToSize:image.size contentMode:UIViewContentModeScaleAspectFit];
// 寫入目錄,替換舊圖
NSData *launchData = UIImagePNGRepresentation(launchImage);
[launchData writeToFile:path atomically:YES];
}
}
}
以上兩種方法都只能保證更新后二次啟動是顯示正確的,首次啟動沒找到辦法。
然而大多數(shù)人都想要酷炫的啟動,創(chuàng)建出了很多啟動動畫,那么這時候對于蘋果要求的一張圖適配所有屏幕就可能會產生很多問題,比如圖片在原有的坐標上可能發(fā)生偏移,而你也不知道到底偏移了多少。
看到有人提出這樣的方案,原理還是跟之前的LaunchImage一樣,但是不知道這個能不能在蘋果最新的這個規(guī)則下上架。此處是鏈接哦
以上僅限于個人只有一個手機,若有其他情況,大家也可以補充。