我的团队在使用 Apple 的按需资源框架时遇到了一个非常奇怪的问题。这是一个随机发生的问题,用户将成功下载我们的资源之一,但是当我们尝试通过 NSBundle.PathsForResources() 访问该资源的路径时,它不会出现。当用户使用特定资源标签进入此状态时,我们还没有找到解决问题的方法。每次访问应用程序的这一部分时,我们的代码都会尝试重新获取受影响的资源标签,因此这不是不重新获取的问题,我们肯定会获取并成功下载。奇怪的是,卸载应用程序并重新安装甚至无法修复这种损坏状态。人们会假设在 iOS 上删除应用程序和重新安装之间没有任何转移,但这里似乎并非如此。此外,这发生在看似随机的资产上,没有影响某些按需资源包的模式,在所有情况下都不同。一旦资源标签被“变砖”,它就会保持这种状态。有什么想法可能导致此问题/我们可以尝试解决什么问题?
下载代码:
// create and initialize new resource request
public async Task CreateODRResourceRequest(string tag)
{
if (string.IsNullOrWhiteSpace(tag))
{
throw new ArgumentNullException(nameof(tag));
}
// Create resource request
var request = new NSBundleResourceRequest(new[] { tag });
// Set highest loading priority
request.LoadingPriority = NSBundleResourceRequest.LoadingPriorityUrgent;
_currentResourceRequest = request;
var resourcesAlreadyAvailable = await request.ConditionallyBeginAccessingResourcesAsync();
// ensure we only download resource if it's not already on the device
if (!resourcesAlreadyAvailable)
{
await request.BeginAccessingResourcesAsync();
}
}