gpt4 book ai didi

ios - 无法以编程方式访问 iCloud Drive 中的某些文件

转载 作者:行者123 更新时间:2023-11-29 13:54:41 26 4
gpt4 key购买 nike

这可能是我的解决方案

我怀疑我的问题是因为我没有打开“iCloud”功能,但因为我有一个免费的开发者帐户,所以我不能这样做。

如果打开“iCloud”功能是解决方案,是否还有一些文档说明了这一点

我只找到了documentation regarding "CloudKit"从不提及“iCloud Drive”。

在此website有一些指向其他文档的链接。


问题陈述

iCloud Drive 中的文件夹结构:

  • “TestApp”(iCloud Drive 中带有应用程序名称的目录)
    • “测试”(目录)
      • “testFile 1.txt”(使用 UIDocumentBrowserViewController 打开文档)
      • “testFile 2.txt”(尝试以编程方式打开文档)

如果我使用 UIDocumentBrowserViewController ( documentation ) 打开目录中的文档,我可以毫无问题地调用 document.open(...) (document 是一个 UIDocument 子类)。但是,如果我想以编程方式访问文件夹中的其他文件,则会出现错误:

Error Domain=NSCocoaErrorDomain Code=257 "The file “testFile 2.txt” couldn’t be opened because you don’t have permission to view it." UserInfo={NSFilePath=/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/TestApp/test/testFile 2.txt, NSUnderlyingError=0x2829d20a0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

我如何尝试以编程方式访问“testFile 2.txt”

当用户打开“testFile 1.txt”时,我得到它的 url 即:

"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”“不存在”。

最佳答案

打个比方:

您是某人家中的客人。你要点水。他们从冰箱里拿出一瓶给你。

这是否意味着他们允许您去冰箱拿一瓶啤酒或一瓶 Wine ?不,这是否意味着允许搜索他们冰箱里的东西,看看他们有什么?不可以。你能明确地要啤酒吗?是的。他们能说“不”吗?也是。

同样,您的应用是用户设备上的访客。它在沙箱中运行。它需要请求访问沙箱外资源的权限。

在文件访问的情况下,它需要对其要访问的文件的特定权限。它不能只创建文件路径并访问文件;用户需要专门授予访问文件的权限。

在这种情况下,权限是通过 UIDocumentBrowserViewController 授予的。您的应用未被授予访问 testFile 2.txt 的权限,因此 iOS 的行为就好像该文件不存在一样。如果您想访问该文件,则必须明确询问。

应用无法访问用户文件的完整内容。

关于ios - 无法以编程方式访问 iCloud Drive 中的某些文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57293825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com