Sandbox和Finder别名

时间:2017-12-29 14:10:28

标签: swift macos appstore-sandbox

我尝试使用这种使用resolvedFinderAlias()方法的方法为用户提供文件创建安全范围的URL,该文件恰好是别名:

func storeBookmark(url: URL) -> Bool
{
    //  Resolve alias before storing bookmark
    let origURL = (url as NSURL).resolvedFinderAlias()

    //  Peek to see if we've seen this key before
    if let data = bookmarks[url] {
        if self.fetchBookmark(key: url, value: data) {
            Swift.print ("= \(url.absoluteString)")
            return true
        }
    }
    do
    {
        let options:URL.BookmarkCreationOptions = [.withSecurityScope,.securityScopeAllowOnlyReadAccess]
        let data = try url.bookmarkData(options: options, includingResourceValuesForKeys: nil, relativeTo: origURL)
        bookmarks[url] = data
        return self.fetchBookmark(key: url, value: data)
    }
    catch let error
    {
        NSApp.presentError(error)
        Swift.print ("Error storing bookmark: \(url)")
        return false
    }
}

在尝试将已解析的URL用作相对URL时抛出错误;我原先只是把传入的URL换成了ddin工作的origURL。

唯一的解决方案是不执行此操作,或先前在原始URL中传递。这几乎就像你无法交换必须从打开的对话框或粘贴板中删除的URL。

作为别名的URL不适合沙盒工作吗?

0 个答案:

没有答案