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 を呼び出すことができます。
“AppleScript で書いたクラスを ObjC から使う” への1件のコメント
[…] Leopard 登場後、いきなり超応用編からスタートしたこの AppleScriptObjC シリ […]