iOS更新后如何保留旧版启动画面和应用图标?

227

我有一个应用程序,最近更换了启动图像和应用程序图标,并从项目中的所有位置删除了旧资源。当我通过Xcode构建升级应用程序的旧版本到新版本时,一切正常。然而,如果我已经安装了旧版本的应用程序,然后从TestFlight升级它,每次我杀掉应用程序然后重新启动它时,旧的启动图像会在显示新的启动图像之前短暂出现。同样地,当我关闭应用程序时,旧的应用程序图标会在短暂闪烁后切换回我的新的应用程序图标。

我使用iExplorer打开应用程序,并注意到在/Library/Caches/Shapshots目录中保存了旧的启动屏幕图像(我不知道它是如何或为什么会出现在那里)。当我通过iExplorer手动删除它时,它就不再出现了。然而,当我尝试使用NSFileManager方法删除它时,我收到错误提示,说我无法删除此目录中的文件。

有人遇到过这种情况并有什么建议吗?


3
相同的问题,使用新的启动屏幕时,新的启动屏幕从未显示,而是使用了先前版本的缓存图像。 - Christophe Fondacci
27个回答

3

只需将您的设备连接上电脑,进入Xcode > 窗口 > 设备 > 您的设备,在已安装应用程序中选择您的应用程序,右键单击并下载容器,转到生成的文件,右键单击,显示包内容,AppData,Library,Caches,并删除文件。 现在回到Xcode > 窗口 > 设备 > 您的设备 > 您的应用程序,右键单击以替换容器。


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

2
这对我很有用:http://arsenkin.com/launch_screen_image_cache.html。感谢上述引用的线程,我找到了一种解决方法——如果您的新图像与旧图像同名,请将其命名为不同的名称,并将其放在*.xcassets文件夹之外的项目目录中,并在UIImageView中引用它。就是这样。听起来很简单但我曾经怒不可遏。
我可以确认@JERC的做法有效,感谢arsenkin。
在我的情况下,我在一个React Native项目上工作,并且有一个.storyboard文件在ios/projectname中。我只想用相同大小的新图片替换旧图片并保留旧的约束条件。我不想让用户删除应用程序或重新启动手机。 我做了什么:
  1. 将图像复制到项目src中(在我的情况下,我把它放在了src/assets中)。
  2. 打开Finder并将图像拖入xcode项目的项目目录中。
  3. 会弹出一个窗口,请确保创建对项目的引用。此处
  4. 将.storyboard中的图像源更改为引用图像。此处
  5. 清除构建文件夹。此处
  6. 重新构建应用程序

2

Xcode 10/iOS 12

尝试了上述所有方法后,我不得不从启动屏幕中删除图片视图并替换为新的。

最初的回答:

尝试了上述所有方法后,我只能删除启动画面中的图像视图,并将其替换为新的。


将图像放置在资产文件夹之外,并使用引用到该图像的新图像视图替换启动屏幕中的图像视图。这对我有效! - user3788747
对我没用 :/ - Petru Lutenco

1
这是我发现的最快解决此问题的方法,尽管听起来很蠢:
  1. 右键单击LaunchScreen.xib或您的启动屏幕文件,选择删除文件,然后选择移至废纸篓。这将删除文件及其过去更新的所有引用。

  2. 进入垃圾箱,将文件拖放回xCode项目中(在yourProjectName中)。

  3. 清理并重新构建。


1

好的,我找到了问题所在。在我的应用程序的先前版本中,我们使用了一个启动屏幕XIB。在开发这个新版本的过程中,XIB被删除并仅替换为静态启动图像。

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


3
不,我正在使用一个启动屏XIB,但它没有更新。我猜你通过从Launch Screen > Static image > Launch Screen中切换来解决了这个问题。在XCode中修改启动屏幕并运行它,iPhone上仍然显示旧的启动屏幕。该图像被设备缓存。我猜如果我更改启动屏幕的名称,它就会奏效。 - Christophe Fondacci
重新创建一个不同名称的启动屏并不能解决问题,仍然看到旧的启动屏。唯一的“希望”是iOS在每次应用程序更新时重新生成其缓存,但我找不到任何相关文档。 - Christophe Fondacci

1

模拟器或真实设备均可 您只需要按照以下步骤操作。

  1. 从xc资源中删除启动画面。
  2. 将png或jpg文件拖放到根目录中。
  3. 打开LaunchScreen.xib或storyboard。打开ViewController并设置ImageView引用,引用您拖放的特定图像。

如果您没有ViewController并且使用旧版本的React,则只会找到名为View的内容。因此,在该视图未显示您的启动画面时,请将其删除并创建新的ViewController。


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

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。运行失败(呃),所以我将它改回.storyboard,重新运行应用程序只是为了测试我没有搞砸其他任何东西 - 而旧屏幕没有首先出现。所以无论我做了什么,它都必须清除了旧缓存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接