2

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

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

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

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

更新

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

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

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

4

1 回答 1

1

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

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

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

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

更新

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

  1. 安装试飞版本 A
  2. 加载 ODR
  3. 安装试飞 Build B
  4. 等待 24 小时
  5. 尝试加载另一个 ODR

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

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

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

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

于 2021-01-22T15:12:19.703 回答