iCloud Drive 无法删除从其他设备创建的文件

iCloud Drive cannot remove file created from other device

我正在尝试采用 iCloud Drive 来存储我的应用程序数据的备份,每个备份使用一个文件,如果相关的话,它们是具有自定义扩展名的简单 XML 文件。文件创建和上传工作正常,但由于我现在试图让用户手动删除备份,我发现我无法以编程方式删除文件,但如果我从 [=32= 上的应用程序转到 iCloud Drive,我可以这样做] 或 macOS 上 Finder 中的文件夹。

为了保存文件,我首先使用

检索容器的根目录
FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")

并创建 Document 文件夹(如果它不存在),因为我希望用户能够在临时目录中本地创建文件后查看和编辑文件我用

上传它
let file = FileManager.default
if file.fileExists(atPath: remotePath.path) {
    try? file.removeItem(at: remotePath)
}

try? file.setUbiquitous(true, itemAt: localPath, destinationURL: remotePath)

其中 remotePath 是之前检索到的附加文件名的路径。要加载文件,我使用 NSMetadataQuery 并在每个返回的项目上使用 NSMetadataItemURLKey 获取每个文件的路径,这工作正常但是当我尝试

try? FileManager.default.removeItem(at: retrievedPath)

如果同一设备创建了文件,它会工作,但如果它来自另一个设备,它总是会失败,并且错误表明该文件不存在于指定路径。

为清楚起见,我删除了错误处理代码,但我测试了此行为以检查抛出的错误。

如何从其他设备删除任何文件,我是否遗漏了一些步骤?

确实漏了点什么,看了this question, in particular this answer后发现即使NSMetadataQueryreturns路径正确也有可能文件没有下载到设备,因此出现错误。

要正确删除文件,您必须模仿 UIDocument 的行为并在后台队列上使用 NSFileCoordinator,请参阅之前引用的答案以了解实施细节。