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()
}
将解决该问题。
通过文件共享选项实现"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()
}
将解决该问题。