我从Swift开始,我想创建一个应用程序以在Finder中加载所选文件并执行某些操作,例如在AppleScript中。
不好的是,我找不到有关该操作的任何信息。
在AppleScript中完成此操作非常简单:
tell application "Finder" to set theFiles to selection
使用此代码,我只需单击Finder工具栏上的“应用”即可轻松地选择文件。
有“快速”方式吗?
预先感谢
答案 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
。
请提供一些线索