2

我一直在使用托管的应用内可购买内容,但遇到了问题。我已经能够下载内容等,但有时会遇到错误。这是我用来访问下载的代码:

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只需返回应用程序库目录中的应用程序内下载路径。但有时我会收到错误消息:'文件夹“目录”不存在'。但是,下载已经完成。以前有人处理过这个问题吗?我处理错了吗?

非常感谢,

布伦丁

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

4

1 回答 1

1

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

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

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

于 2021-10-10T23:42:26.460 回答