我有一个应用程序,我最近替换了启动图像和应用程序图标,我从项目的任何地方删除了所有旧资产。当我通过构建 Xcode 将应用程序从旧版本升级到新版本时,一切都很好。但是,如果我安装了旧版本的应用程序然后从 TestFlight 升级它,每次我杀死应用程序然后重新启动它时,旧的启动图像会在显示新的启动图像之前短暂出现。同样,当我关闭应用程序时,旧应用程序图标会短暂闪烁,然后再切换回我的新应用程序。
我使用 iExplorer 打开应用程序,发现 /Library/Caches/Shapshots
目录中保存了一张旧启动屏幕的图像(我不知道它是如何或为什么会出现在那里)。当我通过 iExplorer 手动删除它时,它会停止出现。但是,当我尝试使用 NSFileManager
方法使用代码删除它时,我收到错误消息,提示我禁止删除此目录中的文件。
有没有人经历过这种情况并有任何建议?
通过执行以下操作,我已经能够可靠地清除跳板缓存以测试启动图像更改:
从设备中删除您的应用程序关闭设备电源打开设备电源,安装并启动应用程序。
图像每次都会正确更新。遗憾的是,我需要关闭设备才能让它运行——但至少我已经能够以这种方式取得进展。我希望这可以帮助别人。
如果是模拟器,只需重新启动模拟器即可。
Springboard 使用这些缓存来快速切换应用程序。这不是会影响您的生产用户的问题,理论上应该在 Springboard 下次决定对您的应用程序进行快照时消失。
话虽如此,这不是您可以解决的问题。这是 Apple 代码中的错误,而不是您的错误。
更新:似乎有一种不需要重新启动设备的解决方法。
这将在第二次发布后生效!
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
对于模拟器,只需 Reset Contents and Settings...
这对我有用:http://arsenkin.com/launch_screen_image_cache.html
再次感谢我在上面引用的线程,我找到了解决此问题的方法 - 将新图像命名为与以前的图像不同,以防新图像与旧图像同名并将其从 * .xcassets 文件夹到项目目录并在你的 UIImageView 中引用它。就是这样。听起来很愚蠢,但哦,天哪,我有多少愤怒。
如果您真的想解决此问题,我找到了解决方法。 Apple 有一些机制来缓存按图像文件名索引的启动屏幕图像。
当您更改启动屏幕上的任何图像并希望在下次运行时立即看到这些更改。请使用您更改的图像的新图像名称并链接到情节提要或 xib 中的新图像文件。
再次运行,你会看到新的变化出现了。
卸载您的应用程序,重新启动您的手机并再次安装您的应用程序......这在我的情况下实际上已修复。
什么对我有用:
删除 LaunchScreen 的 Scene 和 View Controller 并创建一个新的(确保在 Attributes Inspector 中将其设置为“Initial View Controller”)。
什么对我不起作用:
删除应用程序
重启 iPhone、Mac 或 Xcode
删除派生数据
删除设备的容器
打扫
燃烧 3 个史蒂夫乔布斯巫毒娃娃
笔记:
有时也需要擦除(模拟器)
我也面临同样的问题。发生这种情况是因为模拟器/ iOS 设备在您首次启动应用程序时缓存了启动图像。我对 Brian Trzupek's answer 添加了一些修改:
从 Xcode 资产中删除图像集(例如,launch_image) 添加一个新图像集并向其中添加图像。关闭并打开 iOS 设备。 (重置模拟器的内容和设置)。清理 Xcode 构建文件夹(按 command + option + shift + K)。从设备/模拟器中删除应用程序(如果可用)。再次运行。
老实说,在不确定是否会更新的情况下,我没有冒险上线。
因此,假设您使用的是 xcassets,一个简单的解决方案是:
删除旧图像集 使用不同名称重新创建一个并添加初始屏幕图像 更新情节提要以使用此“新”图像集参考
它肯定会更新! (我什至用设备上已经安装的应用程序进行了测试)。无需清理设备缓存。
只需连接您的设备,转到 Xcode > Window > Devices > Your device,现在在已安装的应用程序中,选择您的应用程序,右键单击并下载容器,转到生成的文件,右键单击,显示包内容,AppData,库,缓存,并删除文件。现在转到 Xcode > Window > Devices > Your device > your app 并右键单击以替换容器。
从设备中删除您的应用程序关闭设备电源启动设备安装并启动应用程序。
为我工作的解决方案
从设备中删除您的应用程序关闭设备打开设备清洁构建文件夹再次构建并安装并启动应用程序。享受
Xcode 10/iOS 12
在尝试了上面提到的所有事情之后,我不得不从 LaunchScreen 中删除 imageview 并用一个新的替换它。
这对我有用:http://arsenkin.com/launch_screen_image_cache.html 再次感谢我在上面引用的线程,我找到了解决此问题的方法 - 以不同的方式命名您的新图像,以防您的新图像一个与旧的同名,并将其从 *.xcassets 文件夹中放到项目目录中,并在您的 UIImageView 中引用它。就是这样。听起来很愚蠢,但哦,天哪,我有多少愤怒。
我可以确认@JERC 有效,感谢 arsenkin
就我而言,我在一个 react native 项目上工作,并且在 ios/projectname 中有一个 .storyboard 文件,我只想用相同的大小替换旧图像并保留旧约束。我不希望用户删除应用程序或重新启动他们的手机。
我做了什么
将图像复制到项目 src(在我的情况下,我将图像放在 src/assets 中)。打开 finder 并将图像拖到 xcode 项目中的项目目录中。将弹出一个窗口,确保您创建了对项目的引用。这里将 .storyboard 中的图像 src 更改为引用的图像。这里清理构建文件夹。这里重建应用程序
好的,所以我发现了这个问题。在我的应用程序的先前版本中,我们使用的是启动屏幕 XIB。在这个新版本的开发中,xib 被删除并只替换为静态启动图像。
解决方案是使用启动屏幕 XIB。我注意到,当我第一次使用启动屏幕 xib 时,存储在快照目录中的文件被替换为 xib 的快照。
这是我发现解决此问题的最快方法,尽管听起来很愚蠢:
右键单击启动屏幕文件上的 LaunchScreen.xibor 并选择删除文件,然后选择删除到垃圾箱。这将从您的项目中删除该文件的所有引用及其过去的更新。进入您的垃圾箱并将文件拖放回您的 xCode 项目(在您的项目名称中)。清洁和重建。
使用这段代码清理启动屏幕缓存:
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()
确保您完成了所有这些步骤
在构建设置中搜索 ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME 键并在整个应用程序中搜索其资产值,然后将其删除。从构建设置中删除 ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME。 Create New Launch screen Xcode -> File -> New -> File -> Launch Screen Goto App main Target -> General -> App Icons and Launch Images -> Launch Screen File -> 选择 New Launch Screen File。如果您只是更改旧的启动屏幕,请尝试用不同的名称命名新资产。
对于模拟器或真实设备您只需要按照以下步骤操作。
从 xc 资产中删除你的飞溅。将 png 或 jpg 文件拖放到 Root 中。 LaunchScreen.xib 或故事板。打开 ViewController 并设置 ImageView 引用您拖动的特定图像。
如果你没有 ViewController 并且使用旧版本的 react 你会发现那里被命名为 View。所以删除它并制作新的 ViewController 以防该 View 不显示您的 Splash。
也有这个问题。作为一个新手,我天真地将 LaunchScreen.storyboard 更改为 LaunchScreen.xib。运行失败(duh),所以我将它改回 .storyboard 重新运行应用程序只是为了测试我没有搞砸任何其他东西 - 旧屏幕没有首先出现。所以无论我做什么,它一定已经清除了旧缓存。
尝试打开模拟器,进入硬件 -> 擦除所有内容和设置。
有同样的问题,但仅限于启动屏幕故事板中使用的图像。将图片从资产目录移动到应用程序包中(例如,资产目录中的旧图像称为launch_logo,应用程序包中的图像称为launchscreen_logo.png)为我们解决了这个问题。
我想这些取决于情况。当它发生在调试或测试时,将在启动屏幕上删除图像。或卸载您的应用程序,然后重新启动。
但它甚至在存档后仍然存在,然后它不能通过重置和清理来解决。
在 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")
}
受 Guilherme Rambo 的博客文章的启发,我创建了一个 cordova-plugin 以编程方式清除 iOS 13+ 上的启动屏幕缓存:
cordova.plugins.launchScreenCache.deleteLaunchScreenCache().finally((result) => {
// returns true in the success case, false if iOS <13
// rejects in an error case
});
如需更多信息,请访问 GitHub repo
就我而言,我没有从 App Setting -> General -> App Icons and Launch Images -> App Icons Source
中选择 App Icons Source
https://i.stack.imgur.com/IyHsr.png
首先
清理和构建项目
方法一:重命名 LaunchScreen.storyboard 中加载的 Splash 图片。
例如,我加载了“splash”,但将其更改为“splashNew”。
方法二:
在不同的设备或模拟器上运行您的应用
例如,如果您在模拟器 iphone 11 中运行应用程序,请将其运行到 iphone 12
不定期副业成功案例分享