我尝试使用这种使用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不适合沙盒工作吗?