我正在使用Ruby-Tk为OS X开发桌面应用程序,我想为该应用程序提供Apple Events界面。这意味着应用程序将定义它将响应的AppleScript命令字典(对应于发送到应用程序的Apple Events),并且用户/其他应用程序可以使用AppleScript命令编写Ruby-Tk应用程序的脚本。其他脚本语言支持这种功能 - Python通过http://appscript.svn.sourceforge.net/viewvc/appscript/py-aemreceive/的py-aemreceive库和Tcl通过http://tclae.sourceforge.net/的tclAE库。我一直在寻找Ruby中的类似功能,并且空洞。
一种可能的机制是rubyobjc桥,它提供了Ruby和Objective-C之间的低级接口,但是这个gem似乎很少使用,并且在示例和文档中非常缺乏,所以我不确定是否这样将是一条富有成效的追求之路。
注意:MacRuby可能有效,但它与Tk不兼容,因此排除了MacRuby。此外,RubyOSA和rb-appscript不是我想要的 - 它们允许Ruby将Apple Events发送到其他应用程序,而不是接收它们。
答案 0 :(得分:1)
在没有其他替代方案的情况下,似乎我将不得不为我需要的AppleEvent C API部分编写自己的Ruby包装器:主要是AEInstallEventHandler和相关函数。幸运的是,Apple仍然支持这个API,尽管它已经在Apple的开发人员文档中被降级为“遗留”状态(尽管有趣的是,它并没有被弃用)。我将通过Ruby的ffi gem集成这些函数,或者更有可能通过Ruby的C API(我仍然需要深入研究)来集成这些函数;直接使用C API将减少对其他gems /模块的依赖性的需求。如果这很顺利,我将把它作为宝石发布。
关于Donal Fellows的评论,我需要定制的AppleEvents - 他推荐的文档中通过Tk支持的那些可以通过从Ruby的Tk界面调用Tk来访问。
答案 1 :(得分:1)