使用Finder打开下载目录,提示用户许可

问题描述 投票:0回答:1

我正在构建一个BitTorrent客户端,在该客户端中,我可以通过上下文菜单为用户提供一个选项,以打开torrent的包含目录。

为此,我尝试使用open(_)实例的NSWorkspace方法,如下所示:

NSWorkspace.shared.open(directory)

其中directory是指向目录的URL实例,例如:

let directory = URL(fileURLWithPath: item.parentPath, isDirectory: true)

这里,item.parentPath是一个拥有绝对路径的字符串。

现在,让我澄清一下代码运行正常。它成功地在Finder中打开了我想要的目录(因为它是打开目录的默认应用程序)。

但是,如果目录碰巧是用户的Downloads目录,则会显示此提示:

Operation rejected due to lack of permissions.

同样,这没关系,因为我的应用程序没有打开Downloads目录的权限。但是,我想尝试打开目录,要求获得许可,就像macOS上的任何其他应用程序一样:

Prompting for permission.

我在文档中查找并找到了NSWorkspace的这种方法:open(_:withApplicationAt:configuration:completionHandler:)。我认为这很棒,因为我可以将promptsUserIfNeeded实例的NSWorkspace.OpenConfiguration属性设置为true,我认为这应该使我的应用程序礼貌地请求打开目录的权限。

这是我生成的代码:

let url = URL(fileURLWithPath: item.parentPath, isDirectory: true)

let configuration: NSWorkspace.OpenConfiguration = NSWorkspace.OpenConfiguration()
configuration.promptsUserIfNeeded = true

let finder = NSWorkspace.shared.urlForApplication(withBundleIdentifier: "com.apple.finder")

// Open file with default application
NSWorkspace.shared.open([url], withApplicationAt: finder!, configuration: configuration)

可悲的是,这没有什么区别。我仍然得到与第一个图像相同的对话框。

我想知道两件事:

  1. 我在做什么错?
  2. 如何打开目录,必要时提示输入权限?
swift xcode macos cocoa appkit
1个回答
0
投票

我假设您希望这一切在沙盒中都能正常播放。您有两种选择:

  1. 使用activateFileViewerSelecting(_:)activateFileViewerSelecting(_:)。这些选项中的任何一个都将提示您的许可,一旦获得许可,您可以根据需要返回使用selectFile(_:inFileViewerRootedAtPath:)

  2. 使用selectFile(_:inFileViewerRootedAtPath:)

© www.soinside.com 2019 - 2024. All rights reserved.