iOS On Demand Resource 错误“资产 URL 已过期”(AssetErrorDomain 代码 6)是啥意思?

Posted

技术标签:

【中文标题】iOS On Demand Resource 错误“资产 URL 已过期”(AssetErrorDomain 代码 6)是啥意思?【英文标题】:What does the iOS On Demand Resource error "Asset URL has expired" (AssetErrorDomain code 6) mean?iOS On Demand Resource 错误“资产 URL 已过期”(AssetErrorDomain 代码 6)是什么意思? 【发布时间】:2019-10-28 15:02:42 【问题描述】:

ios 13.0 开始,我一直在用户日志中看到一个新错误。错误被传递给NSBundleRequest.beginAccessingResources的完成处理程序。

错误的域为“AssetErrorDomain”,代码 6,NSDebugDescription 为“Asset URL has expired”。并非所有用户都遇到此问题,我无法在本地重现。

我真的不明白这个错误代表什么,我应该如何回应它,或者用户最终会如何进入这种状态。一位用户向我报告说,删除并重新安装应用是他们能够解决问题的唯一方法。

有没有人在自己的应用中看到过这个问题?

更新

我向 Apple 提交了 TSI,他们的回复如下:

我最近看到开发人员出现了这个问题。我们目前没有解决方法,但我们正在努力解决。

我还提交了一个雷达 (FB7416830),它被标记为“最近的类似报告:超过 10 个”。所以这显然是一个普遍存在的问题。

【问题讨论】:

Apple 针对 iOS 13.2.3 的发行说明包括“修复了可能阻止应用在后台下载内容的问题”。我希望这是解决此问题的方法,尽管我还没有看到雷达的更新。确认后我会更新。 我在 iOS 13.2.3 上仍然看到这个问题。不幸的是,这似乎不能解决这个问题。 嘿,想知道你是否解决了这个问题?我在 2020 年 5 月也遇到了这个问题 @JulienS。作为一种解决方法,我开始手动对资产进行版本控制,方法是在我更改其内容时更改它们的文件名。 =( 所以你还在使用 ODR,你是在更改文件名还是标签? 【参考方案1】:

我们在最新版本的应用中开始看到这一点。我们无法在 Test Flight 构建中复制它,但是用户向我们发送了带有确切错误的屏幕截图:“AssetErrorDomain”,代码 6

奇怪的是,在过去的 6 个月里,我们发布了许多没有问题的版本,而我们使用 OnDemandResource API 的方式并没有真正改变。我们的一些理论是:

    我们确实从 Legacy 更改为 New XCode 构建系统。我注意到他们打包资产包的方式略有不同 到目前为止,所有报告它的用户都使用 iOS 14.3。也许这个错误在 14.3 中重新出现了? 我们使用 XCode 12 构建了这个版本。之前的版本是使用 11 和 10 构建的 我们注意到 ENABLE_ON_DEMAND_RESOURCES 未设置为 YES。也许这就是问题所在,尽管您会认为它们根本不适用于这种情况。我之前没有注意到这个标志,可能是 XCode 12 中添加的。 最后,我们仍然支持 iOS 9

我可以尝试建议的工作循环来对标签进行版本控制。这仍然是你找到的最好的解决方法吗?

更新

我能够使用以下步骤在试飞中复制它:

    安装试飞版本 A 加载 ODR 安装试飞版本 B 等待 24 小时 尝试加载另一个 ODR

从检查日志来看,它似乎更新了 ODR 清单,但继续使用旧的过期 URL 和 accessKey 来尝试加载资源,导致 AssetErrorDomain 代码 6 错误。

我通过更改标签而不是捆绑名称解决了这个问题。我很确定这是从旧版构建系统转到新版系统的结果,尽管迁移到更新版本的 XCode 也可能是一个问题。我确实在 XCode 12.3 发行说明中看到了对 ODR 修复的引用。

我无法在使用相同构建系统和 XCode (12.3) 版本构建的构建之间复制 2 个测试飞行构建中的错误。所以,我认为我很好地使用相同的标签。如果你不能这样做,似乎会有更多关于这个错误的噪音。不过有点不安。

我还在 Test Flight 中注意到,如果您使用相同的包和标签名称并且它已经下载,它不会在版本之间重新下载 ODR。这对我来说似乎也是一个错误,但我们的捆绑包非常独立,所以不应该影响我的情况。

【讨论】:

这仍然是我正在使用的解决方法。自从我实施了解决方法后,我还没有测试过没有它的行为。 几周前我们刚刚迁移到新构建系统,并且有用户报告 AssetErrorDomain 6。我们在应用程序中有大约 400 种游戏资源,并且从 8 家游戏提供商中不断增长。用版本重新标记资产的工作看起来很有希望!

以上是关于iOS On Demand Resource 错误“资产 URL 已过期”(AssetErrorDomain 代码 6)是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

iOS On Demand 资源:如何调试

iOS 10 后无法下载 On Demand Resources 内容

iOS On Demand Resources 对话框未显示

从 SQL On-Demand 端点运行查询时出现 SSMS 错误

如何下载 On Demand 框架/SDK?

Elastic Beanstalk 中的 cfn-hup“on.demand”触发器