iOS xCode 13 - 应用无法通过 "Open in..." 共享选项访问下载的文件

iOS xCode 13 - App can't access downloaded files via "Open in..." sharing option

通过文件共享选项实现"Open in.." feature时,应用程序无法访问“文件提供程序存储”中的下载文件,FileManager.default.fileExists(atPath: url.path) returns false 尽管文件存在,同时在系统控制台中有类似

的日志
Sandbox: FileAccessIssueA(11544) deny(2) file-test-existence

可能相关也可能不相关。此外,应用程序可以直接从 AirDrop 成功打开文件,或者如果文件已移动到应用程序文件夹。

如需复现,请参阅sample project(使用*.txt文件由应用程序打开)。

如果这是正常行为,请提出建议,如果是,请直接查看相应的文档。如果不是,请告知是否可以修复。

您在应用程序的 info.plist 中使用了选项 Supports opening documents in place

当您使用此选项时,您必须明确地请求使用安全范围从url访问文件,因此更改代码以访问文件有点像:

let isSecuredURL = url.startAccessingSecurityScopedResource() == true
let result = FileManager.default.fileExists(atPath: url.path)

NSLog("File %@ %@", url.path, result ? "exists" : "not exists")

if (isSecuredURL) {
    url.stopAccessingSecurityScopedResource()
}

将解决该问题。