我有一个应用程序,我最近更换了启动图像和应用程序图标,我删除了项目中任何地方的所有旧资产。通过在Xcode中构建将应用程序从旧版本升级到新版本,一切都很好。但是,如果我安装了旧版本的应用程序,那么从TestFlight升级它,每次我杀死应用程序然后重新启动它,旧的启动图像会在显示新的启动图像之前短暂出现。同样,当我关闭应用程序时,旧应用程序图标会短暂闪烁,然后再切换回新应用程序。
我使用iExplorer打开了应用程序,发现有一个保存在/Library/Caches/Shapshots
目录中的旧启动屏幕的图像(我不知道它是如何或为什么到达那里)。当我通过iExplorer手动删除它时,它会停止显示。但是,当我尝试使用NSFileManager
方法使用代码删除它时,我收到错误,说我禁止删除此目录中的文件。
有没有人以前经历过这个并有任何建议?
通过这样做,我已经能够可靠地清除跳板缓存以测试启动映像更改:
每次图像都会正确更新。惭愧我需要关闭设备才能让它继续运行 - 但至少我已经能够以这种方式取得进展。我希望这可以帮助别人。
在模拟器的情况下,只需重新启动模拟器即可。
什么对我有用:
什么对我不起作用:
好的,所以我想出了这个问题。在我的应用程序的早期版本中,我们使用的是Launch Screen XIB。在这个新版本的开发中,xib被删除并仅用静态启动图像替换。
解决方案是使用Launch Screen XIB。我注意到,当我第一次使用启动屏幕xib时,存储在snapshots目录中的文件被替换为xib的快照。
老实说,我没有冒险上线而不确定是否会更新。
因此,假设您使用的是xcassets,一个简单的解决方案是:
- 删除旧图像集
- 使用其他名称重新创建一个并添加启动画面图像
- 更新故事板以使用此“新”图像集参考
它肯定会更新! (我甚至测试过已经安装在设备上的应用程序)。无需清理设备的缓存等。
Xcode 10 / iOS 12
在尝试了上面提到的所有内容之后,我不得不从LaunchScreen中删除imageview并将其替换为新的。
也有这个问题。作为一个新手我天真地将LaunchScreen.storyboard更改为LaunchScreen.xib。运行失败(呃),所以我把它改回了.storyboard重新运行应用程序只是为了测试我没有搞砸任何其他东西 - 旧屏幕没有出现。所以无论我做了什么,它都必须冲掉旧的缓存。
有同样的问题,但只有在启动屏幕故事板中使用的图像。将资产目录中的图像从“名称”更改为应用程序包(例如,资产目录中的旧图像集称为launch_logo,应用程序包中的图像称为launchscreen_logo.png)为我们解决了问题。
尝试打开模拟器,转到硬件 - >擦除所有内容和设置。
Springboard使用这些缓存来快速切换应用程序。这不是一个会影响您的生产用户的问题,并且理论上应该在下次Springboard决定对您的应用进行快照时消失。
话虽这么说,这不是你可以解决的问题。这是Apple的代码中的错误,而不是你的。
对于模拟器只是Reset Contents and Settings...
@ IncGolem
这不是一个会影响您的生产用户的问题
是真的。
当我更改Launch Screen,SplashScreen和App Icon时,我遇到了这个问题。我尝试了每种方法,但它没有用。最后,我刚刚发布了我的应用程序并使用我没有用于开发的设备从App Store下载了我的应用程序。 SplashScreen和App Icon正常工作!
如果您真的想解决这个问题,我找到了解决方案解决方案。 Apple有一些机制来缓存按图像文件名索引的启动画面图像。
当您在启动屏幕上更改任何图像时,您希望立即在下次运行中看到这些更改。请使用新图像名称更改您更改的图像并链接到storyboard或xib中的新图像文件。
再次运行,您将看到新的更改。
卸载您的应用程序,重新启动手机并再次安装您的应用程序...这实际上已修复我的情况。
这对我有用:http://arsenkin.com/launch_screen_image_cache.html
再次,感谢我在上面引用的主题,我找到了一种解决此问题的方法 - 将新图像命名为与之前的图像不同,以防新图像与旧版本具有相同的名称并将其放在*之外.xcassets文件夹到项目目录并在UIImageView中引用它。就是这样。声音愚蠢容易,但我有多大的愤怒哦。
我也遇到了同样的问题。这是因为模拟器/ iOS设备在您首次启动应用程序时会缓存启动映像。我在Brian Trzupek's answer上添加了一些修改:
只需连接您的设备,转到Xcode>窗口>设备>您的设备,现在已安装的应用程序,选择您的应用程序,右键单击并下载容器,转到生成的文件,右键单击,显示包内容,AppData,库,缓存,并删除文件。现在转到Xcode> Window> Devices>您的设备>您的应用程序,然后右键单击以替换容器。