3

我遇到了一个问题,我无法通过 Xamarin.iOS 应用程序访问标记为用于 Apple 的按需资源功能的资产,但只能在模拟器上运行时访问。这仅在更新我的环境后发生。我之前使用 Visual Studio for Mac 8.3.9 版和 Xcode 11.2.1 版,我的应用程序能够在模拟器和物理设备上毫无问题地访问 ODR 资源。

现在我使用的是 Visual Studio 8.4.2 版和 Xcode 11.3.1 版,我的应用程序无法正常运行。但是,我只在 iOS 模拟器(适用于任何 iOS 版本)上运行时才看到问题。我可以在物理设备(运行 iOS 13.0 版)上构建和运行,并且没有发现任何问题。

我正在通过 Visual Studio for Mac 创建和标记用于 Apple ODR 的资产。我有一个 ZIP 文件,我直接将它作为资源添加到我的应用程序的 iOS 项目中。在它的属性中,我将 BuildAction 设置为 BundleResource,选择“Do Not Copy”到输出目录,并给它一个 On-Demand Resource 标签。

当我构建我的解决方案时,我可以看到这个 ZIP 文件嵌套在 .assetpack 目录下的bin/iPhone/Debug/device-builds/iphone12.3-13.0/OnDemandResources. 我相信它应该被放入bin/iPhone/Debug/OnDemandResources/。当我运行调用NSBundleResourceRequest's的代码时BeginAccessingResourcesAsync,它似乎什么也没做。调用该函数后,我在 VS 的应用程序输出调试窗口中看到以下错误消息:

Begin: Request 0x0x600002566100 response: Error: Error Domain=NSCocoaErrorDomain Code=4994 "The requested application data doesn’t exist." UserInfo={NSLocalizedFailureReason=InvalidTag}

没有其他错误或异常被抛出。当我尝试从NSBundleResourceRequest.Bundle对象获取资源路径时,它预期返回 null。

为什么会发生这种情况,为什么这只发生在 iOS 模拟器上而不是物理设备上?搜索上述错误消息时,我无法找到任何有用的信息。Visual Studio 中关于如何在调试模式下构建捆绑资产有什么变化吗?

4

1 回答 1

0

不是真正的答案,而是更多的解决方法。使用 8.3.9 版本的 VS for Mac 似乎不会抛出这个错误,所以我恢复到那个版本

于 2020-04-02T21:30:40.453 回答