我有一个应用程序可以成功存储文档,以便它们显示在用户的 iCloud Drive 文件夹中并在设备之间同步。我可以在 iCloud Drive 下的“文件”应用程序中看到我的应用程序的文件夹。
如果我进入 iOS 设置应用程序并将应用程序的“文档存储”设置从“iCloud Drive”更改为“在我的 iPhone 上”,我希望我的应用程序开始使用文件中的“在我的 iPhone 上”位置应用程序代替。当我这样做时,我可以看到我的应用程序的新文件夹出现在“文件”应用程序的“在我的 iPhone 上”部分中,这似乎证实了我的假设。
我正在检查
ubiquityIdentityToken
和 url(forUbiquityContainerIdentifier:)
,它们不会改变:即使我的应用程序切换到“在我的 iPhone 上”,它们仍然返回 iCloud 目录的详细信息。因此,我的应用程序继续读取文件并将其写入 iCloud Drive 目录,而不是“On My iPhone”目录。
我不知道我应该如何尊重这个设置。
ubiquityIdentityToken
周围的文档建议它应该返回 nil,但这只是在用户退出 iCloud 时才适用,而不仅仅是更改我的应用程序的文档存储设置吗?
或者我完全误解了文档存储设置是什么?
经过更多研究,我想我明白了。
“文档存储”设置与普遍存在的容器无关。该设置仅针对在 Info.plist 中将
UISupportsDocumentBrowser
(支持文档浏览器)设置为 true 的应用程序显示。
据我所知,这还没有很好的记录。我根据 NSFileProviderManager.documentStorageURL 和 理解 iOS:“文档存储”设置对应用程序意味着什么?.
将其拼凑在一起。我一定是不小心添加了这个条目,认为它对我的应用程序是必要的,但我的应用程序不使用文档浏览器。当我在 iCloud Drive 中或在我的 iPhone 上为我的应用程序创建文件夹(具体取决于此设置)时,我感到很困惑,但因为我使用的是 FileManager 的无处不在的 API,所以它仅保存到 iCloud Drive。
用户有选择地为每个应用程序打开/关闭 iCloud 的正确方法是在“设置”应用程序中导航至 Apple ID → iCloud → 使用 ICLOUD 的应用程序:显示全部 → 并切换应用程序的开关。