我在Xamarin iOS中使用文档选择器。在DocPicker的示例中,他们调用了StartAccessingSecurityScopedResource之类的东西,上面有注释。
//重要!您必须锁定安全范围,然后才能//访问该文件
为什么他们要锁定这个文件?当访问文件时,它是否阻止文件从其他地方修改?
在iOS(和MacOS沙盒应用)中,访问一个外部文档,一个在你自己的应用沙盒之外的文档,需要被操作系统跟踪的特殊权限。因此,一旦你有一个指向外部文件的NSUrl,你实际上无法访问它,直到你明确请求它,因为这样做有安全/资源开销,
注意:确保你调用StopAccessingSecurityScopedResource
,否则你的应用程序泄漏基于内核的资源(try
/finally
是一个明智的编码模式在这里)
在iOS中,使用UIDocumentPickerViewController打开或移动文档的应用程序也会接收安全作用域的url。
要访问安全作用域的URL,您必须调用startAccessingSecurityScopedResource()方法(或其核心基础等效,CFURLStartAccessingSecurityScopedResource(_:)函数)。对于iOS应用,如果你使用uiddocument访问URL,它会自动为你管理安全范围的URL。
Ref: Security-Scoped URLs