我怀疑我的问题发生是因为我没有打开“iCloud”功能,但由于我有一个免费的开发者帐户,我不能这样做。
如果打开“iCloud”功能是解决方案,是否也有一些文档说明这一点?
我只找到了关于“CloudKit”的文档,其中从未提及“iCloud Drive”。
在这个网站上有一些附加文档的链接。
iCloud驱动器中的文件夹结构:
如果我使用
错误domain=nscocoaerrordomain code=257“无法打开文件testfile 2.txt,因为您没有查看该文件得权限。”UserInfo=nsFilePath=/private/var/mobile/library/mobile documents/ComAppleCloudDocs/TestApp/Test/TestFile 2.txt,NsUnderlyingError=0x2829D20A0 Error Domain=nsPosixErrordomain Code=1“不允许操作}
当用户打开“testfile1.txt”时,我得到它的url,即:
"file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/TestApp/test/testFile%201.txt"
现在我使用以下代码尝试访问“testfile2.txt”(另请参见内联注释):
// I get this url from the delegate method `UIDocumentBrowserViewControllerDelegate.documentBrowser(_:didPickDocumentsAt:)`
let file1URL = // ...
let file2URL = file1URL
.deletingLastPathComponent()
.appendingPathComponent("testFile 2")
.appendingPathExtension("txt")
let success = file2URL.startAccessingSecurityScopedResource() // returns `false`
TestDocument(fileURL: file2URL).open{ success in
print(success) // prints `false` and see ERROR above
}
// checking existence
let fm = FileManager.default
fm.isUbiquitousItem(at: file1URL) // returns `true`
fm.fileExists(atPath: file1URL.path) // returns `true`
fm.isUbiquitousItem(at: file2URL) // returns `false`
fm.fileExists(atPath: file2URL.path) // returns `false`
正如您所看到的,“testfile2.txt”对于文件管理器来说“不存在”。
考虑一个类比:
你是别人家里的客人。你要些水。他们从冰箱里拿了一瓶给你。
这是否意味着他们已经允许你去冰箱拿一瓶啤酒或一瓶葡萄酒?不是。这是不是意味着允许搜查他们冰箱里的东西,看看他们有什么?不。你能明确地要啤酒吗?是的。他们能说“不”吗?也是的。
同样,你的应用程序是用户设备上的访客。它在沙箱中运行。它需要请求访问沙箱外部资源的权限。
在文件访问的情况下,它需要对它想要访问的文件有特定的权限。它不能仅仅创建一个文件路径和访问一个文件;用户需要特别授予访问文件的权限。
在本例中,权限是通过
应用程序无法访问用户文件的完整内容。