使用复制从其他 iOS 个应用程序接收文件

Receiving files from other iOS apps with Copy In

我希望我的应用程序能够从 files.app 应用程序接收 .wav 文件。我将 com.microsoft.waveform-audio 添加到 Info.plist 中的文档类型数组,我的应用程序在共享操作 sheet 中显示为“Open In X”(不是 Copy In)。我想实际复制文件,而不是就地打开它们,os 不允许我复制这些文件(错误代码 257)。我正在尝试复制 UIApplicationLaunchOptionsURLKey 路径中的文件,但是不行。

launchOptions 字典在 applicationDidLaunch WithOptions 中也包含 RequireOpenInPlace=1。

如何让其他应用程序使用 UIActivityViewController 将文件复制到我的应用程序?

如果您要打开文件 "in place"(不是复制),您应该使进程可以访问 url 引用的资源。

在访问文件之前尝试调用 url.startAccessingSecurityScopedResource()。然后你应该可以复制文件了。

当您不再需要该文件时,请不要忘记用 url.stopAccessingSecurityScopedResource() 平衡调用。

参考:https://developer.apple.com/documentation/foundation/nsurl#1663809

编辑: 另一种解决方案可能是在 Info.plist 中将 LSSupportsOpeningDocumentsInPlace 设置为 NO。然后您将始终在共享 sheet 中看到 "Copy to XYZ",因此系统会将文件复制到应用程序沙箱中的 Documents/Inbox 文件夹。