7

我正在使用 Ruby-Tk 为 OS X 开发桌面应用程序,我想为该应用程序提供一个 Apple 事件接口。这意味着应用程序将定义一个 AppleScript 命令字典,它将响应(对应于发送到应用程序的 Apple 事件),并且用户/其他应用程序可以使用 AppleScript 命令编写 Ruby-Tk 应用程序脚本。其他脚本语言支持此类功能——Python 通过http://appscript.svn.sourceforge.net/viewvc/appscript/py-aemreceive/上的 py-aemreceive 库和通过http://tclae.sourceforge上的 tclAE 库的 Tcl .net/。我一直在 Ruby 中寻找类似的功能,但一无所获。

一种可能的机制是 ruby​​objc 桥,它在 Ruby 和 Objective-C 之间提供了一个低级接口,但是这个 gem 似乎很少使用,并且非常缺乏示例和文档,所以我不确定这是否是一个硕果累累的追求之路。

注意:MacRuby 可能可以工作,但它与 Tk 不兼容,因此排除了 MacRuby。此外,RubyOSA 和 rb-appscript 不是我想要的——它们允许 Ruby 将 Apple 事件发送到其他应用程序,而不是接收它们。

4

2 回答 2

1

在没有其他选择的情况下,看来我将不得不为我需要的 AppleEvent C API 部分编写自己的 Ruby 包装器:主要是 AEInstallEventHandler 和相关函数。幸运的是,Apple 仍然支持这个 API,即使它在 Apple 的开发者文档中已被归为“遗留”状态(但有趣的是,它并没有被弃用)。我将通过 Ruby 的 ffi gem 或者更有可能通过 Ruby 的 C API(我仍然需要深入研究)集成这些功能;直接使用 C API 可以减少对其他 gems/modules 的依赖。如果一切顺利,我会将它作为宝石发布。

关于 Donal Fellows 的评论,我需要自定义 AppleEvents——在他推荐的文档中通过 Tk 支持的那些可能可以通过从 Ruby 的 Tk 接口调用 Tk 来访问。

于 2011-09-21T14:27:47.993 回答
1

您可能想检查appscript库(注意:似乎只适用于 OS X 提供的 Ruby),或者尝试使用MacRuby,它几乎包含了 OS X 中可用的所有 API,甚至包括 C 的 API。

于 2011-11-18T14:16:42.620 回答