获取选定的Finder文件

时间:2019-09-17 11:14:03

标签: swift macos

我从Swift开始,我想创建一个应用程序以在Finder中加载所选文件并执行某些操作,例如在AppleScript中。

不好的是,我找不到有关该操作的任何信息。

在AppleScript中完成此操作非常简单:

tell application "Finder" to set theFiles to selection

使用此代码,我只需单击Finder工具栏上的“应用”即可轻松地选择文件。

有“快速”方式吗?

预先感谢

1 个答案:

答案 0 :(得分:0)

使用NSAppleScript,我可以获得一个可能的解决方案。...

func getFromFinder()  -> String{  // Exucute Applescript and Get "Finder selection"

    var scriptToPerform: NSAppleScript?

    let myAppleScript = "tell application \"Finder\" \nactivate \nset theSelection to selection \nset theItems to {} \nrepeat with theItem in items of theSelection \nset theItem to POSIX path of (theItem as string) & \"\n\" \nset theItems to theItems & theItem \nend repeat \nreturn theItems as string \nend tell"

    scriptToPerform = NSAppleScript(source:myAppleScript)

    if let script = scriptToPerform {

        var possibleError: NSDictionary?
        let outputString =    script.executeAndReturnError(&possibleError).stringValue

        if let error = possibleError {
                return "ERROR: \(error)"
        } else {
            if outputString != nil {
                    return outputString!
            }
        }
    }

        return ""
}

...但是经过大量测试后,NSAppleScript选项可以通过从Finder <50个文件中进行选择来很好地工作,在该数量的文件NSAppleScript花费的时间过长之后,我无法通过一个来填充进度条。

NSOpenPanel当然是一个选择,但并不能使其如我所愿。

我要做的是制作一个“ MenuBarApp”或从Finder-Window-Menu启动该应用程序,然后从Finder窗口捕获要处理的选定文件。 多数情况下,它们是在Finder中执行搜索后找到的文件,是的,我知道我可以使用NSOpenPanel选项执行搜索,但这不是问题。

...经过几个小时的搜索,我来到了https://github.com/Mortennn/FiScript并查看了我的代码:

FinderSync(框架) 通过添加徽标,快捷菜单项和工具栏按钮来增强Finder的用户界面。
> FIFinderSyncController FIFinderSyncController类充当Finder Sync扩展与Finder本身之间的桥梁。使用Finder Sync控制器配置您的扩展程序,在Finder窗口中的项目上设置徽章,并获取所选项目和目标项目的列表。
>> selectedItemURLs() 返回一组选定的项目。

import FinderSync

let finderController = FIFinderSyncController.default()

guard let selectedItemsURL = finderController.selectedItemURLs() else {
    return
}

...但是我无法使其工作。它总是得到nil

请提供一些线索