通过苹果应用商店应用内购买访问托管内容的问题:'The folder “Contents” doesn’t exist.'

Issue with accessing hosted content via apple app store in-app purchases: 'The folder “Contents” doesn’t exist.'

我一直在处理托管的应用内可购买内容,运行遇到了一个问题。我已经能够获取要下载的内容等等,但有时 运行 会出错。 这是我用来访问下载的代码:

if let hostedContentPath = contentURL?.appendingPathComponent("Contents", isDirectory: true) {
    do {
        try FileManager().moveFileToLibrary(hostedPath: hostedContentPath)
            onSuccess(contentIdentifier)
        } catch let err as NSError {
            onError(contentIdentifier, err)
        }
    }
}

此代码是 StoreKit 提供的 SKDownload 对象扩展的一部分。 我有 FileManager 的扩展:

func moveFileToLibrary(hostedPath: URL) throws {
        
    let fileManager = FileManager.default
        
    let files = try fileManager.contentsOfDirectory(atPath: hostedPath.relativePath)
        
    for file in files {
            
        let sourcePath: URL = hostedPath.appendingPathComponent(file)
        var destinationPath: URL = fileManager.getLibraryPath(folders: [file])
            
        if fileManager.fileExists(atPath: destinationPath.path) {
            print("[FileManager] File already present")
            return
        }
        // Move file to Library
        try fileManager.moveItem(at: sourcePath, to: destinationPath)
        // Set removal from backup
        var resourceValues = URLResourceValues()
        resourceValues.isExcludedFromBackup = true
        try destinationPath.setResourceValues(resourceValues)
            
        print("[FileManager] File moved")
    }
}

getLibraryPath 只需returns 应用程序库目录中应用程序内下载的路径。 但有时我会收到错误消息:'The folder “Contents” doesn’t exist'。但是,下载已完成。有没有人处理过这个问题?我是不是操作有误?

非常感谢,

布伦丁

编辑:当 SKDownload 的下载状态失败时,我经常会收到此错误:'“mzafbenc.16634573027684271354”无法移动到“StoreKit”,因为已存在同名项目'。有谁知道这是否相关或者我是否可以解决?

有时,在下载内容后,我得到状态为“失败”的 SKDownload,并且还有类似您的错误描述 -“mzafbenc.16634573027684271354”无法移动到“StoreKit”...“

针对此问题的简单解决方案是每次在 didFinishLaunchingWithOptions 中使用 FileManager 清理应用程序中的目录,对于下一个路径:Library/Caches/StoreKit

至于“内容不存在”,请确保您在对下载内容进行所有操作后完成了交易。