AppleScript で書いたクラスを ObjC から使う

XcodeScreenSnapz011

Snow Leopard では、AppleScript Studio の後を継いで AppleScriptObjC.framework が導入され、Cocoa の大半の機能を AppleScript から利用できるようになりました。

例えば、AppleScript から Cocoa/Objective-C のクラスを利用したり、AppleScript でそれらのクラスのサブクラスを作成できるようになりました(言い換えれば、作成しなければならなくなった …笑)。

少し残念なのは、前述の通り 「AppleScript から Cocoa の機能を利用する」ことに重点が置かれており、Cocoa/Objective-C の世界から AppleScript を利用する ことには(まだそんなに調べていませんが)重点が置かれていないようです。

ただ、AppleScript で書いたクラスも、アプリケーションの動作中には Objective-C のクラスとして存在するわけで、それにアクセスするのは、(ヒネた内部構造になっていなければ)さほど難しくないはず…。

というわけで作成したのが、今回のサンプルコードです。

サンプルコード

これは何?

内容は、ボタンを押すとダイアログが表示される、という単純なものです。ただし、内部では Objective-C で書かれた MainController が AppleScript で書かれた Talker クラスをインスタンス化し、文字列の配列を設定し、最後に talk() メソッドを呼んでいます。talk() メソッドの中身は、文字列をループで取り出し、(往年の)display dialog コマンドで表示する、ほぼ Pure AppleScript なものになっています。

これができると何がうれしいかというと、Cocoa/Objective-C アプリから AppleScript を呼び出すのがよりシンプルになる と思います。

最近でこそ Scripting Bridge で少しはマシになったと思いますが、前準備が必要だったり、操作対象のアプリが決まっている必要があったりと、(あまり使ったことはないのですが)なかなか辛そうです。

これからは、例えば AppleScript による処理を担当するクラスをひとつ作っておけば、好きなように AppleScript を呼び出すことができます。

One thought on “AppleScript で書いたクラスを ObjC から使う

  1. Pingback: ppmweb » AppleScriptObjC を Cocoa/Objective-C アプリに統合する

Leave a Reply

Your email address will not be published. Required fields are marked *