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方法用代码删除它时,我得到错误,说我被禁止删除这个目录中的文件。

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


当前回答

在我的情况下,我没有选择应用程序图标来源从应用程序设置->通用->应用程序图标和启动图像->应用程序图标来源

其他回答

尝试打开模拟器,进入硬件->擦除所有内容和设置。

Springboard使用这些缓存来快速切换应用程序。这个问题不会影响到你的产品用户,理论上,下次Springboard决定对你的应用进行快照时,这个问题就会消失。

也就是说,这不是一个你能解决的问题。这是苹果代码中的bug,不是你的。

更新: 似乎有一个不需要重新启动设备的解决方案。

这将在第二次发射后生效!

do {
   try FileManager.default.removeItem(atPath: NSHomeDirectory()+"/Library/SplashBoard")
} catch {
   print("Failed to delete launch screen cache: \(error)")
}

关于它是如何工作的完整解释:https://www.rambo.codes/posts/2019-12-09-clearing-your-apps-launch-screen-cache-on-ios

确保你完成了所有这些步骤

在build中搜索ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME键 然后在整个应用程序中设置和搜索其资产值 删除它。 从构建设置中删除ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME。 创建新的启动屏幕Xcode ->文件->新建->文件->启动 屏幕 Goto应用程序主目标->一般->应用程序图标和启动图像-> 选择新的启动屏幕文件。 如果你只是改变旧的启动屏幕,试着命名新的资产 名字不同。

对我有用的是:

删除启动屏幕的场景和视图控制器,并创建一个新的(确保你在属性检查器中将其设置为“初始视图控制器”)。

什么对我不起作用:

删除应用 重新启动iPhone、Mac或Xcode 删除派生数据 删除设备的容器 清洁 焚烧3个史蒂夫·乔布斯的巫毒娃娃

注意:

有时也需要擦除(模拟器)

我也面临着同样的问题。这是因为模拟器/ iOS设备在你第一次启动应用程序时缓存了启动图像。我对Brian Trzupek的回答做了一些修改:

删除图像集从Xcode资产(例如。launch_image) 添加一个新的图像集,并向其添加图像。 关闭并打开iOS设备。(重置模拟器的内容和设置)。 清除Xcode构建文件夹(按command + option + shift + K)。 从设备/模拟器中删除应用(如果可用)。 再次运行。