从Swift中的Applescript获取返回值

时间:2015-03-10 02:37:10

标签: macos swift applescript

是否可以在Swift中运行Applescript并接收返回值? 我有一个如下的脚本。如何在swift中运行它并获得返回值?

global frontApp
set windowTitle to "
tell application "System Events"
    set frontApp to first application process whose frontmost is true
end tell
return {frontApp}

我的代码如下

var set: String = "set windowTile to \"\"\n"
var tell: String = "tell application \"System Events\"\n"
var setFrontApp: String = "set frontApp to first application       
                           process whose frontmost is true\n"
var setFrontAppName: String = "set frontAppName to name of frontApp\n"
var tellProcces: String = "tell process frontAppName\n"
var tellFirst: String = "tell (1st window whose value of attribute          
                              \"AXMain\" is true)\n"
var setWindowTitle: String = "set windowTitle to value of 
                               attribute \"AXTitle\"\n"
var endTellFirst: String = "end tell\n"
var endTellProcess: String = "end tell\n"
var endTell: String = "end tell"
var startAtLoginScript: NSAppleScript = NSAppleScript(source: tell 
                                        + deleteItem + endTell)!
startAtLoginScript.executeAndReturnError(errorInfo)

你能告诉我结果应该在哪里或我做错了什么吗?如果我打印出errorInfo或跟踪结果是一些奇怪的数字。

3 个答案:

答案 0 :(得分:4)

NSAppleScript是一堆无用的垃圾。如果要将自己的AppleScript代码集成到ObjC / Swift项目中,请使用AppleScript-ObjC桥,它使用标准的ObjC消息传递,并提供大多数AS类型及其基础等效项之间的自动桥接:

http://appscript.sourceforge.net/asoc.html

http://macscripter.net/viewtopic.php?pid=175562#p175562

如果要执行用户提供的脚本,通常需要使用NSUserAppleScriptTask。从功能上来说,它甚至比NSAppleScript更长(没有持久性支持);但是,它是沙盒友好的,而NSAppleScript(在进程中运行)不是。

https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUserAppleScriptTask_Class/

答案 1 :(得分:2)

实际上,let text = startAtLoginScript.stringValue不起作用,因为NSAppleScript没有名为“stringValue”的成员。但是,您可以这样做:

let text = startAtLoginScript.executeAndReturnError(errorinfo)!.stringValue!

这将返回脚本的输出,或者,如果出现错误,则返回errorinfo中的任何内容。

答案 2 :(得分:1)

如果找到解决方案给我提问。

let text = startAtLoginScript.stringValue

这就是我可以解析结果的方法。