如何访问由 Files.app 复制的 UIPasteboard 中的数据?

How to access data in a UIPasteboard copied by Files.app?

我想使用 Files.app 复制文件夹(例如从 Dropbox 或 iCloud),然后切换到我的应用程序并读取该文件夹的内容以进行进一步处理。我找不到从 UIPasteboard 获取实际数据的方法。在 NSItemProvider 上调用 loadObject 给了我一个 NSData 存档,我可以取消存档然后得到一个(私有的)FPItem,它实现了 <NSFileProviderItem>,但是现在呢?我如何实际请求下载该项目指向的实际文件夹?

据我了解,您想从 Dropbox 下载一个文件夹。您可能需要考虑使用 Dropbox API 和 URLSession.shared.datatask(...) 使用 REST 请求。如果你不想处理实现细节,你可以使用像 SwiftyDropbox 这样的库。确实没有必要使用 UIPasteboard,因为您的最终目标是将文件夹下载到您的应用程序。如果您想将上述文件夹保存到 文件应用程序 ,您可以在 download/process 文件夹后这样做。

这里有一些有用的 links:

  1. Swifty Dropbox Overview
  2. Swifty Dropbox Download Example
  3. Swifty Dropbox API Docs
  4. Dropbox API HTTP (RESTful Requests)

在 link 2 中,下面的代码片段获取保存文件的目录。获取整个文件夹的一种方法是 (1) 在 Documents 目录中创建一个新文件夹,例如 this 和 (2) 遍历 Dropbox 文件夹中的每个项目并将其添加到新创建的文件夹中。

let fileManager = FileManager.default
let directoryURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let destURL = directoryURL.appendingPathComponent("myTestFile")

要实现 (1),您需要获取文件夹中的所有文件,您可以使用此 /list_folder API endpoint. Then, to implement (2), you would iterate through all the files given, downloading them like in link 2

让我知道我的回答是否有帮助,或者您是否需要进一步说明。非常感谢! :)

我曾利用一次宝贵的技术支持事件 (TSI) 让 Apple 工程师发表声明。

结果是,目前不支持将Files.app中的文件夹复制粘贴到您自己的应用程序中。如果要导入文件夹,请使用 UIDocumentPickerViewController.