通过苹果应用商店应用内购买访问托管内容的问题:'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
至于“内容不存在”,请确保您在对下载内容进行所有操作后完成了交易。
我一直在处理托管的应用内可购买内容,运行遇到了一个问题。我已经能够获取要下载的内容等等,但有时 运行 会出错。 这是我用来访问下载的代码:
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
至于“内容不存在”,请确保您在对下载内容进行所有操作后完成了交易。