iOS更新后保留旧的启动屏幕和应用程序图标

问题描述 投票:110回答:17

我有一个应用程序,我最近更换了启动图像和应用程序图标,我删除了项目中任何地方的所有旧资产。通过在Xcode中构建将应用程序从旧版本升级到新版本,一切都很好。但是,如果我安装了旧版本的应用程序,那么从TestFlight升级它,每次我杀死应用程序然后重新启动它,旧的启动图像会在显示新的启动图像之前短暂出现。同样,当我关闭应用程序时,旧应用程序图标会短暂闪烁,然后再切换回新应用程序。

我使用iExplorer打开了应用程序,发现有一个保存在/Library/Caches/Shapshots目录中的旧启动屏幕的图像(我不知道它是如何或为什么到达那里)。当我通过iExplorer手动删除它时,它会停止显示。但是,当我尝试使用NSFileManager方法使用代码删除它时,我收到错误,说我禁止删除此目录中的文件。

有没有人以前经历过这个并有任何建议?

ios objective-c cocoa-touch
17个回答
237
投票

通过这样做,我已经能够可靠地清除跳板缓存以测试启动映像更改:

  1. 从设备中删除您的应用
  2. 关闭设备电源
  3. 启动设备,安装和启动应用程序。

每次图像都会正确更新。惭愧我需要关闭设备才能让它继续运行 - 但至少我已经能够以这种方式取得进展。我希望这可以帮助别人。

在模拟器的情况下,只需重新启动模拟器即可。


3
投票
  1. 从设备中删除您的应用
  2. 关闭设备电源
  3. 上电设备
  4. 安装并启动应用。

2
投票

什么对我有用:

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

什么对我不起作用:

  • 删除应用
  • 重启iPhone,Mac或Xcode
  • 删除派生数据
  • 删除设备的容器
  • 清洁的
  • 烧3史蒂夫乔布斯伏都教玩偶

1
投票

好的,所以我想出了这个问题。在我的应用程序的早期版本中,我们使用的是Launch Screen XIB。在这个新版本的开发中,xib被删除并仅用静态启动图像替换。

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


1
投票

老实说,我没有冒险上线而不确定是否会更新。

因此,假设您使用的是xcassets,一个简单的解决方案是:

  1. 删除旧图像集
  2. 使用其他名称重新创建一个并添加启动画面图像
  3. 更新故事板以使用此“新”图像集参考

它肯定会更新! (我甚至测试过已经安装在设备上的应用程序)。无需清理设备的缓存等。


1
投票

Xcode 10 / iOS 12

在尝试了上面提到的所有内容之后,我不得不从LaunchScreen中删除imageview并将其替换为新的。


0
投票

也有这个问题。作为一个新手我天真地将LaunchScreen.storyboard更改为LaunchScreen.xib。运行失败(呃),所以我把它改回了.storyboard重新运行应用程序只是为了测试我没有搞砸任何其他东西 - 旧屏幕没有出现。所以无论我做了什么,它都必须冲掉旧的缓存。


0
投票

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


-1
投票

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


34
投票

Springboard使用这些缓存来快速切换应用程序。这不是一个会影响您的生产用户的问题,并且理论上应该在下次Springboard决定对您的应用进行快照时消失。

话虽这么说,这不是你可以解决的问题。这是Apple的代码中的错误,而不是你的。


25
投票

对于模拟器只是Reset Contents and Settings...


13
投票

@ IncGolem

这不是一个会影响您的生产用户的问题

是真的。

当我更改Launch Screen,SplashScreen和App Icon时,我遇到了这个问题。我尝试了每种方法,但它没有用。最后,我刚刚发布了我的应用程序并使用我没有用于开发的设备从App Store下载了我的应用程序。 SplashScreen和App Icon正常工作!


11
投票

如果您真的想解决这个问题,我找到了解决方案解决方案。 Apple有一些机制来缓存按图像文件名索引的启动画面图像。

当您在启动屏幕上更改任何图像时,您希望立即在下次运行中看到这些更改。请使用新图像名称更改您更改的图像并链接到storyboard或xib中的新图像文件。

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


8
投票

卸载您的应用程序,重新启动手机并再次安装您的应用程序...这实际上已修复我的情况。


5
投票

这对我有用:http://arsenkin.com/launch_screen_image_cache.html

再次,感谢我在上面引用的主题,我找到了一种解决此问题的方法 - 将新图像命名为与之前的图像不同,以防新图像与旧版本具有相同的名称并将其放在*之外.xcassets文件夹到项目目录并在UIImageView中引用它。就是这样。声音愚蠢容易,但我有多大的愤怒哦。


5
投票

我也遇到了同样的问题。这是因为模拟器/ iOS设备在您首次启动应用程序时会缓存启动映像。我在Brian Trzupek's answer上添加了一些修改:

  1. 从Xcode资产中删除图像集(例如,launch_image)
  2. 添加新图像集并向其添加图像。
  3. 关闭并打开iOS设备。 (重置模拟器的内容和设置)。
  4. 清理Xcode构建文件夹(按命令+选项+ shift + K)。
  5. 从设备/模拟器中删除应用程序(如果可用)。
  6. 再次运行。

3
投票

只需连接您的设备,转到Xcode>窗口>设备>您的设备,现在已安装的应用程序,选择您的应用程序,右键单击并下载容器,转到生成的文件,右键单击,显示包内容,AppData,库,缓存,并删除文件。现在转到Xcode> Window> Devices>您的设备>您的应用程序,然后右键单击以替换容器。

© www.soinside.com 2019 - 2024. All rights reserved.