如何从Swift运行JXA?

问题描述:

如果我有一个JXA源代码的字符串变量,有没有办法从swift运行?看来NSAppleScript只能用于AppleScript源。如何从Swift运行JXA?

为什么? JXA在各方面都是一只狗。如果您只是想运行JS代码,那么JavaScriptCore Obj-C API就更加简洁和容易。如果你想控制“AppleScriptable”应用程序,然后使用AppleScript - 这是唯一正式支持的†选项,正常工作。

(†有SwiftAutomation,但苹果还没有被咬,我不倾向于支持它自己给苹果公司的Mac自动化的慢性管理不善,我们会看到WWDC17会发生什么。)

+0

我已经作出大量的JXA脚本,所以我希望能够从Swift中执行。如果Swift无法做到这一点,我想只有通过swift才能用osascript运行shell? – jl303

+0

有OSAKit,但它没有记录,所以你必须为自己弄清楚。或者将脚本保存为'.scpt'格式,即'NSAppleScript' /'NSUserAppleScriptTask'将运行。 (每次从源代码编译本身就是一种代码异味;在天真/不安全的代码中很常见,它们通过代码字符串进行参数化,而不是将它们作为参数传递给脚本的“运行”处理程序。)另一个AppleScript的好处是AppleScriptObjC可以[直接从ObjC/Swift](http://appscript.sourceforge.net/asoc.html)调用AS处理程序,就好像它们是本地方法一样;大大减少痛苦。 – has