在一台设备上写入的文件无法在另一台设备上打开

File written on one device can't be opened on another

这个问题是五年前提出的,但没有解决,所以我假设这不是同一个问题。

我有一个可以将多个文件写入 iCloud 的应用程序。我可以在 iCloud.com 以及我的 Mac iCloud 文件夹中看到更新的当前文件,但我只能在第二个设备。我尝试读取文件的应用程序失败并显示 "file not found"。如果我从强制下载的文件应用程序打开文件,然后 运行 我的应用程序,它打开并读取文件就好了。所以,我的问题是,如何以编程方式强制下载文件。我尝试将“.icloud”附加到文件名,但仍然显示未找到。

有什么建议吗?

基本思路是检查文件是否可用。如果不是,只需使用 startDownloadingUbiquitousItem(at url: URL) 请求文件开始下载。

完整的 iCloud 文档可在此处获得:https://developer.apple.com/library/content/documentation/General/Conceptual/iCloudDesignGuide/Chapters/DesigningForDocumentsIniCloud.html

更新: 请注意,这是一个旨在描述基本思想的示例代码解决方案。

let fileManager = FileManager.default
let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents", isDirectory: true)
let iCloudDocumentToCheckURL = iCloudDocumentsURL?.appendingPathComponent("whateverFileName", isDirectory: false)

guard let iCloudDocumentPath = iCloudDocumentsURL?.path else {
    return
}

if fileManager.fileExists(atPath: iCloudDocumentPath) {
    // Do something with the document
} else {
    do {
        try fileManager.startDownloadingUbiquitousItem(at: iCloudDocumentToCheckURL!)
        // Will start downloading the file
    } catch let error as NSError {
        print("Unresolved error \(error), \(error.userInfo)")
    }
}