Предлагает ли Ruby механизм реагирования на события Apple в OS X? - PullRequest
7 голосов
/ 21 сентября 2011

Я работаю над настольным приложением для OS X, используя Ruby-Tk, и я хотел бы предоставить интерфейс Apple Events для приложения. Это означает, что приложение будет определять словарь команд AppleScript, на которые оно будет реагировать (что соответствует событиям Apple, отправляемым в приложение), а пользователи / другие приложения могут создавать сценарии для приложения Ruby-Tk с помощью команд AppleScript. Другие языки сценариев поддерживают такую ​​функциональность - Python через библиотеку py-aemreceive на http://appscript.svn.sourceforge.net/viewvc/appscript/py-aemreceive/ и Tcl через библиотеку tclAE на http://tclae.sourceforge.net/. Я искал аналогичную функциональность в Ruby и вышел пустым ,

Одним из возможных механизмов является мост rubyobjc, который обеспечивает низкоуровневый интерфейс между Ruby и Objective-C, но этот драгоценный камень кажется малоиспользуемым и крайне не хватает примеров и документации, поэтому я не уверен, что это был бы плодотворный путь для достижения.

Примечание: MacRuby может работать, но он не совместим с Tk, так что это исключает MacRuby. Кроме того, RubyOSA и rb-appscript - это не то, что я ищу - они позволяют Ruby отправлять события Apple в другие приложения, а не получать их.

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Возможно, вы захотите проверить библиотеку appscript (примечание: похоже, работает только с Ruby, предоставляемым OS X), или попробуйте использовать MacRuby , который охватывает практически все API доступны в OS X, даже Си.

1 голос
/ 21 сентября 2011

В отсутствие других альтернатив, похоже, мне придется написать свою собственную оболочку Ruby для частей API AppleEvent C, которые мне нужны: в основном AEInstallEventHandler и связанных функций. К счастью, Apple по-прежнему поддерживает этот API, даже несмотря на то, что он был переведен в «устаревший» статус в документах Apple для разработчиков (хотя, что интересно, это не устарело). Я либо интегрирую эти функции через ffi gem Ruby, либо, что более вероятно, через API C Ruby (который мне еще предстоит изучить); использование C API напрямую уменьшит потребность в зависимостях от других гемов / модулей. Если все пойдет хорошо, я выпущу его как драгоценный камень.

Что касается комментария Donal Fellows, мне нужно создать пользовательские AppleEvents - те, которые поддерживаются через Tk в документах, которые он рекомендует, могут быть доступны через вызовы Tk из интерфейса Ruby Tk.

...