I have an app where I recently replaced the launch images and app icons, I removed all of the old assets from everywhere in the project. When I upgrade the app from the old version to the new version by just building in Xcode, everything is fine. However, if I have the old version of my app installed then upgrade it from TestFlight, every time I kill the app then restart it the old launch image briefly appears before showing the new launch image. Similarly when I then close the app, the old app icon briefly flashes before switching back to my new one.

我使用iExplorer打开应用,并注意到/Library/Caches/Shapshots目录中保存了旧的启动屏幕图像(我不知道它是如何或为什么会出现在那里)。当我通过iExplorer手动删除它时,它就不再出现了。但是,当我尝试使用NSFileManager方法用代码删除它时,我得到错误,说我被禁止删除这个目录中的文件。

有人有过这样的经历吗?有什么建议吗?


当前回答

使用这段代码清理启动屏幕缓存:

import UIKit

public extension UIApplication {
    func clearLaunchScreenCache() {
        #if DEBUG
        do {
            let launchScreenPath = "\(NSHomeDirectory())/Library/SplashBoard"
            try FileManager.default.removeItem(atPath: launchScreenPath)
        } catch {
            print("Failed to delete launch screen cache - \(error)")
        }
        #endif
    }
}

用法:

UIApplication.shared.clearLaunchScreenCache()

其他回答

有同样的问题,但只是在启动屏幕故事板使用的图像。将图像从资产目录中移动,并将其名称更改为应用程序包(例如,资产目录中设置的旧图像称为launch_logo,应用程序包中的图像称为launchscreen_logo.png)解决了我们的问题。

卸载你的应用程序,重启你的手机,重新安装你的应用程序…这在我的例子中是固定的。

这是我发现的解决这个问题的最快方法,尽管听起来很愚蠢:

右键单击LaunchScreen。xibor在你的启动屏幕文件,并选择删除文件,然后选择删除垃圾。这将从项目中删除对该文件及其过去更新的所有引用。 进入你的垃圾和拖放文件回到你的xCode项目(在yourProjectName)。 清理和重建。

我找到了变通方案,如果你真的想解决这个问题。 苹果公司有一些机制来缓存启动屏幕的图像,通过图像文件名进行索引。

当你改变任何图像在启动屏幕上,你想看到这些变化在下次运行立即。请使用你修改过的新图片名称,并链接到storyboard或xib中的新图片文件。

再次运行,您将看到新的更改出现。

只要连接你的设备,进入Xcode >窗口>设备>你的设备, 现在在安装的应用程序中,选择你的应用程序,右键单击并下载容器,转到生成的文件,右键单击,显示包内容,AppData,库,缓存,并删除文件。 现在转到Xcode >窗口>设备>你的设备>你的应用,右键点击替换容器。