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


173

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

我使用iExplorer打开了该应用程序,并注意到/Library/Caches/Shapshots目录中保存了旧启动屏幕的图像(我不知道它是如何或为什么到达那里)。当我通过iExplorer手动删除它时,它停止出现。但是,当我尝试使用以下代码删除它时NSFileManager方法,出现错误,提示我禁止删除该目录中的文件。

有人曾经历过此事并有任何建议吗?


3
同样的问题,在启动屏幕上,新的启动屏幕从不显示,它使用的是先前版本的缓存图像。
Christophe Fondacci,2015年

Answers:


327

通过执行以下操作,我已经能够可靠地清除跳板缓存以测试启动映像更改:

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

图像每次都会正确更新。不好意思,我需要关闭设备电源才能使用它-但是至少我已经能够以这种方式取得进步。我希望这可以帮助别人。

对于模拟器,只需重启模拟器即可。


19
这是唯一对我有用的解决方案。非常感谢你!
马辛Kapusta

谢谢英雄!像魅力一样工作。
拉维

5
也适用于模拟器。
Alexey Podlasov '02

1
这也是TestFlight的解决方法吗?从TestFlight更新应用程序还会缓存启动图像。您确定不会像testflight那样在应用程序版本上发生这种情况吗?
哈桑

1
这让我想起了汽车镜喜剧。但是它的工作很棒。谢谢!
ssowri1

49

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

话虽如此,这不是您可以解决的问题。这是Apple代码中的错误,而不是您的错误。

更新:似乎有一种解决方法,不需要重新启动设备。

这将在第二次启动后生效!

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

有关其工作原理的完整说明:https//rambo.codes/ios/quick-tip/2019/12/09/clearing-your-apps-launch-screen-cache-on-ios.html


7
您能否链接到可以确认您的声明“这不是会影响您的生产用户的问题”的文档?我有完全相同的问题,如果这仅是开发人员,我可以,但是如果没有明确说明您所说内容的官方文档,我将不会抓住机会。
Christophe Fondacci,2015年

6
对于某些人来说,这也是App Store更新的原因:(
。– Ajumal

15
不幸的是,我可以确认此问题甚至影响生产用户(因此,从App Store升级应用程序之后)。
Eugenio

是的,它确实会影响生产版本/ App Store版本。
强尼

任何来源吗?
丹尼尔·斯普林格


18

@InkGolem

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

是真的。

更改启动屏幕,SplashScreen和应用程序图标时,我遇到了这个问题。我尝试了每种方法,但是没有用。最后,我刚刚发布了我的应用程序,并使用未用于开发设备从App Store下载了我的应用程序。SplashScreen和应用程序图标正常运行!!!


1
如果您已经在Appstore上有了一个应用程序,而用户只是使用新的“启动屏幕”更新了该应用程序,该怎么办?
rhcpfan '17

我已经在appstore 下载中有一个应用程序,并且使用新的启动屏幕发布了更新。发布我的应用程序后,我使用10台以上的设备(未用于开发)进行测试,以验证“这不是会影响您的生产用户的问题”是真实的,并且我对用户没有任何抱怨闪屏。
chinnawatp

7
这个问题也在我的Appstore版本中出现,@ Brian Trzupek的技巧也起作用。
7

3
确认,这是在App Store的实时构建中发生的。这个答案在语言上有些问题。我无法确定它们是否意味着问题会影响生产规模,但是我的经验表明确实如此
强尼

2
生产用户实际上正在发生!!显示的启动画面是旧的。重新启动手机可以解决此问题。希望人们在接下来的几个小时内会看到新的启动画面,而无需重新启动。
Valerio

13

我找到了解决方法,如果您真的想解决此问题,该怎么办。Apple有一些机制可以缓存启动屏幕的图像,这些图像按图像文件名进行索引。

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

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


1
我不想删除该应用程序,因此尝试了此应用程序。这加上重新启动设备对我来说很有用。
Murray Sagal

这对我不起作用。重新启动设备也没有用...我现在放弃。
Lensflare

没为我工作。我什至删除了imageView并使用新图像创建了一个新图像,但它仍然不起作用。
RickardElimää19年

它对我不起作用。我得到的是旧的图片未加载(仍然显示背景色而不是图片),并且在新的启动屏幕出现之前,仍显示了不到一秒钟的时间。
Michal Cichon

13

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

同样,由于我在上面引用了线程,因此我找到了一种解决此问题的方法-为新图像命名与以前不同的名称,以防新图像与旧图像具有相同的名称并将其从*中排除.xcassets文件夹到项目目录,并在UIImageView中引用它。就是这样。听起来很愚蠢,但哦,吓了一跳,我有多愤怒。


3
此处的关键是将这些图像保留在资产目录之外。谢谢!
Michal Cichon

3
如果您关心生产用户的良好UX,并且希望避免新旧映像之间的这种丑陋过渡,则此解决方案确实会有所帮助。
Michal Cichon

3
最后,一个切实可行的解决方案!此处的关键是将图像移出资源文件夹。
埃拉德

1
完美运行,而无需重新启动或删除应用程序。
Soufian Hossam

奇怪的。但是我有时从资产目录中移出的背景图像没有加载,并且得到了黑色背景。现在我需要再次调试它,但是不幸的是我不知道该如何复制。
Michal Cichon


5

我也面临同样的问题。这是因为模拟器/ iOS设备在首次启动应用程序时会缓存启动映像。我对Brian Trzupek的答案进行了一些修改:

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

5

对我有用的是:

  • 删除LaunchScreen的Scene and View Controller并创建一个新的(请确保在Attributes Inspector中将其设置为“ Initial View Controller”)。

什么都没有为我工作:

  • 删除应用
  • 重新启动iPhone,Mac或Xcode
  • 删除衍生数据
  • 删除设备的容器
  • 清洁用品
  • 燃烧3个史蒂夫·乔布斯伏都教娃娃

注意:

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


4
我不相信。我将需要史蒂夫·乔布斯(Steve Jobs)伏都教娃娃的来源位置进行确认。
克里斯·布兰德斯玛

3

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


3

老实说,我不确定是否会对此进行更新,也没有冒险上线。

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

  1. 删除旧图像集
  2. 用不同的名称重新创建一个并添加初始屏幕图像
  3. 更新情节提要以使用此“新”图像集参考

它将肯定更新!(我什至对设备上已安装的应用进行了测试)。无需清理设备缓存。


3
  1. 从设备上删除您的应用
  2. 关闭设备电源
  3. 开机装置
  4. 安装并启动应用程序。

1

好的,我知道了问题所在。在我的应用程序的先前版本中,我们使用了启动屏幕XIB。在开发新版本的某个位置,xib被删除,仅被静态启动映像取代。

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


2
否,我正在使用启动屏幕XIB,并且它没有更新。我猜您可以通过从“启动屏幕”>“静态图像”>“启动屏幕”切换来解决此问题。在XCode中修改启动屏幕并运行它仍会在iPhone上显示旧的启动屏幕。图像缓存在设备上。我想如果我更改启动屏幕的名称,它将成功解决问题
Christophe Fondacci 2015年

用其他名称重新创建启动屏幕无法解决该问题,但仍然可以看到旧的屏幕。唯一的“希望”是iOS会在每次应用更新时重新生成其缓存,但是我找不到关于此的任何文档
Christophe Fondacci

1

Xcode 10 / iOS 12

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


1

尽管听起来很愚蠢,这是我找到的解决此问题的最快方法:

  1. 右键单击LaunchScreen.xib或在启动屏幕文件上,Remove file然后选择,然后选择Remove to trash。这将从您的项目中删除文件的所有引用及其过去的更新。

  2. 进入回收站,然后将文件拖放回xCode项目(在中yourProjectName)。

  3. 清理并重建。


1

使用以下代码清除启动屏幕缓存:

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()

0

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


0

有相同的问题,但仅用于启动屏幕情节提要中使用的图像。将图像从资产目录更改为名称更改为应用程序包(例如,资产目录中设置的旧图像称为launch_logo,应用程序包中的图像称为launchscreen_logo.png)为我们解决了此问题。


0

我想这些取决于情况。当它在调试或测试中发生时,可在启动屏幕上删除图像。或卸载您的应用程序,然后重新启动。

但是,即使在存档后也是如此,然后通过重置和清除无法解决。


0

就我而言,我没有从“应用程序设置”->“常规”- 在此处输入图片说明>“应用程序图标和启动图像”->“应用程序图标源”中选择“ AppIcon Source”


0

在AppDelegate中尝试

    if #available(iOS 13.0, *) {
        do {
            try FileManager.default.removeItem(atPath: NSHomeDirectory()+"/Library/SplashBoard")
        } catch {
            print("Failed to delete launch screen cache: \(error)")
        }
    } else {
        print("ios is min")
    }

0

解决方案为我服务

  1. 从设备上删除您的应用
  2. 关闭装置
  3. 开启装置
  4. 清理构建文件夹
  5. 再次构建并安装并启动应用程序。

    请享用


0

确保已完成所有这些步骤

  1. 在构建设置中搜索ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME键,并在整个应用程序中搜索其资产值,然后将其删除。
  2. 从构建设置中删除ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME。
  3. 创建新的启动屏幕Xcode-> File-> New-> File-> Launch Screen
  4. 转到应用程序的主要目标->常规->应用程序图标和启动图像->启动屏幕文件->选择新的启动屏幕文件。
  5. 如果您只是更改旧的启动屏幕,请尝试使用不同的名称命名新资产。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.