如何通过 Finder 在 Xcode 中使用 Swift 从 Finder 同步扩展打开文件夹

Ale*_*lec 5 macos xcode cocoa swift findersync

当用户单击我正在编写的 Finder 同步扩展中的菜单项时,我尝试打开特定文件夹。我知道有很多类似的问题,因为我已经看过它们,但没有一个解决方案在我的应用程序中起作用。

\n\n

这是我试图打开的文件夹:

\n\n
let folder = "/Users/username/some/folder"\n
Run Code Online (Sandbox Code Playgroud)\n\n

这篇文章,使用 Swift 在查找器中显示文件夹的内容建议执行以下操作:

\n\n
NSWorkspace.shared().selectFile(nil, inFileViewerRootedAtPath: folder)\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我厌倦了这种方法时,单击菜单项时不会执行任何操作。

\n\n

我看过很多其他帖子,也尝试过以下方法,但还没有任何效果。

\n\n
NSWorkspace.shared().activateFileViewerSelecting([URL(fileURLWithPath: safeZone, isDirectory: true)])\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会导致包含文件夹“some”被打开,而我实际想要打开的文件夹“folder”只是突出显示。

\n\n
NSWorkspace.shared().openFile(safeZone)\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我厌倦了这种方法时,单击菜单项时不会执行任何操作。

\n\n
NSWorkspace.shared().open(URL(fileURLWithPath: safeZone, isDirectory: true))\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我尝试此方法时,我从 Finder 收到一条消息,说明:

\n\n
The application \xe2\x80\x9cMyAppFileSyncExtension\xe2\x80\x9d does not have permission to open \xe2\x80\x9cfolder.\xe2\x80\x9d\n
Run Code Online (Sandbox Code Playgroud)\n\n

有没有办法通过 Xcode 赋予扩展更多权限?我知道我的父应用程序可以毫无问题地读取和写入该文件夹。

\n\n
NSWorkspace.shared().openFile(folder, withApplication: "Finder")\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我厌倦了这种方法时,单击菜单项时不会执行任何操作。

\n\n

我猜测这些方法都不起作用,因为我正在尝试从 Finder Sync Extension 执行此操作。有谁知道如何解决这个问题?

\n\n

更新

\n\n

我测试了父应用程序中的这些方法,其中大多数都有效。问题是如何从 Finder Sync Extension 创建这种类型的行为。任何帮助将不胜感激。

\n