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

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


当前回答

模拟器或实际设备 你只需要遵循这些步骤。

从xc资产中移除你的飞溅。 拖放png或jpg文件到根。 LaunchScreen。Xib或故事板。打开ViewController并设置ImageView ref你拖动的特定图像。

如果你没有ViewController,使用旧版本的react,你会在那里发现名为View。移除它,创建新的ViewController以防那个视图没有显示你的Splash。

其他回答

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

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

这个对我很有用:http://arsenkin.com/launch_screen_image_cache.html 再一次,感谢我上面提到的帖子,我找到了一种方法 解决这个问题-命名你的新图像不同于那里的一个 以防你的新名字和旧名字一样 把它从*里拿出来。Xcassets文件夹到项目目录和 在UIImageView中引用它。就是这样。听起来很傻很简单 天啊,我有多愤怒。

我可以确认@JERC起作用了,这要感谢arsenkin

在我的情况下,我在一个react原生项目上工作,在ios/projectname中有一个.storyboard文件,我只是想用相同的大小替换旧的图像,并保留旧的约束。我不希望用户删除应用程序或重新启动他们的手机。

我做了什么

复制图像到项目src(在我的情况下,我把我的在src/assets)。 打开查找器,将图像拖到xcode项目到项目目录。 会有一个弹出窗口,确保你创建了一个项目的引用。在这里 将.storyboard中的图像src更改为引用的图像。在这里 清理构建文件夹。在这里 重建应用程序

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

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

好吧,我找到问题所在了。在我之前的应用版本中,我们使用的是启动屏幕XIB。在这个新版本的开发过程中,xib被删除了,取而代之的是静态启动图像。

解决方案是使用启动屏幕XIB。我注意到,当我第一次使用启动屏幕xib时,存储在快照目录中的文件被xib的快照所取代。