iOS11 Swift 4:存储从 DocumentBrowserViewController 检索到的 URL 的访问权限

iOS11 Swift 4: Storing access rights for URLs retrieved from DocumentBrowserViewController

当使用DocumentBrowserViewController从其他应用程序访问文件时,是否可以存储对这些文件的访问权限?

具体问题

目前,出于概念验证的目的,我将通过 DocumentBrowserViewController 选择的文件的 url 打印到控制台,将 url 硬编码在我的代码中的某处并尝试再次打开该文件。这不起作用,因为:{Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

现在,有没有办法存储访问权限?

在博客中 post 我发现了一些使用:

do {
    let data = try sourceURL.bookmarkData(
        options: URL.BookmarkCreationOptions.withSecurityScope,
        includingResourceValuesForKeys: nil,
        relativeTo: nil)
    print(data)
} catch {
    print(error)
}

但是 withSecurityScope 是 "unavailable"。 (准确地说:'withSecurityScope' has been explicitly marked unavailable here (Foundation.NSURL)

有没有办法做这种事情?

提前致以问候和感谢:)

编辑

所以可能是我问的有点仓促,上面的代码只需要调整成:

do {
    let data = try sourceURL.bookmarkData(
        options: URL.BookmarkCreationOptions.minimalBookmark,
        includingResourceValuesForKeys: nil,
        relativeTo: nil)
    print(data)
} catch {
    print(error)
}

然后可以像这样使用此数据:

let url = try URL.init(resolvingBookmarkData: data, bookmarkDataIsStale: &stale)!

:)

您需要从 URL 创建书签并存储它。这在本 WWDC session: https://developer.apple.com/videos/play/wwdc2018/216 的 40' 标记处进行了解释,并且也在上周发布的粒子示例代码中。

基本上,上面的代码片段是正确的,除了 withSecurityScope 标志在 iOS 上没有用(这是自动的)。在启动时解析 URL 时,您需要启动访问或使用 UIDocument,它会为您完成此操作。