我怀疑出现问题是因为我没有打开“ iCloud”功能,但是由于我拥有免费的开发者帐户,所以我不能这样做。
如果打开“ iCloud”功能是解决方案,是否还有一些说明此问题的文档?
我只发现了documentation regarding "CloudKit",从未提及“ iCloud Drive”。
在此website上有一些指向其他文档的链接。
iCloud Drive中的文件夹结构:
UIDocumentBrowserViewController
打开文档)如果我使用UIDocumentBrowserViewController
(documentation)在目录中打开文档,则可以毫无问题地调用document.open(...)
(document
是UIDocument
的子类)。但是,如果我要以编程方式访问文件夹中的另一个文件,则会出现错误:
Error Domain = NSCocoaErrorDomain代码= 257“由于您无权查看文件“ testFile 2.txt”,因此无法打开该文件。” UserInfo = {NSFilePath = / private / var / mobile / Library / Mobile Documents / com〜apple〜CloudDocs / TestApp / test / testFile 2.txt,NSUnderlyingError = 0x2829d20a0 {Error Domain = NSPOSIXErrorDomain代码= 1“不允许操作”}}
当用户打开“ testFile 1.txt”时,我得到了它的网址,即:
"file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/TestApp/test/testFile%201.txt"
现在,我正在使用以下代码尝试访问“ testFile 2.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`
如您所见,文件管理器的“ testFile 2.txt”“不存在”。
答案 0 :(得分:0)
考虑一个类比:
您是某人家中的客人。你要水。他们从冰箱里拿出一瓶给您。
这是否意味着他们已准许您去冰箱拿啤酒或一瓶酒?否。这是否意味着可以搜索冰箱的物品以查看其拥有的物品?否。您可以明确要求啤酒吗?是。他们可以说“不”吗?也是。
类似地,您的应用程序是用户设备上的访客。它在沙箱中运行。它需要请求访问沙箱外部资源的权限。
对于文件访问,它需要其想要访问的文件的特定权限。它不能只是创建文件路径并访问文件。用户需要专门授予访问文件的权限。
在这种情况下,通过UIDocumentBrowserViewController
授予权限。您的应用未获得对testFile 2.txt
的访问权限,因此iOS就像该文件不存在一样。如果要访问该文件,则必须明确询问。
应用程序无法访问用户文件的完整内容。