クラスメソッドかインスタンスメソッドか

AppleScriptObjC に関しては、風のウワサで「何でもできるよ!」と聞いてはいたのですが、Cocoa/Objective-C と AppleScript の両方やっている身からすると、触っていくうちにそこかしこで「え? Cocoa のあれどうやってやるの?」という場面に遭遇します。

ふと思ったのが、AppleScript のクラスでどうやってクラスメソッドを定義するのか ということです。ひとまずの結論としては、クラスメソッドとして呼びたければそのように、インスタンスメソッドとして呼びたければそのように呼べばいい ようです。

サンプルコード

ClassMethodOrInstanceMethodScreenSnapz001

Continue reading

Xcode 3.2 でテキストマクロを入力できなくなったら

Xcode では、「編集」→「テキストマクロを挿入」メニューから、あるいは、定義された短縮キーワードを入力した後オートコンプリートさせることによって、テキストマクロを入力することができます。例えば「init」なら init メソッドの定義、とか:

XcodeScreenSnapz012

テキストマクロの内容は、/Developer/Applications/Xcode.app/Contents/PlugIns/TextMacros.xctxtmacro/Contents/Resources/ 以下の *.xctextmacroファイルで定義されており、私はこれを改造して使っていました。

どマイナーな機能だと思うので、ここまでで「それ何の話?」 という方もいらっしゃるかもしれませんが、その説明はまたの機会として(おい)、Xcode 3.2 にしてから前述の短縮キーワードによる入力ができなくなり、とてもしんどいので調べてみました。

Continue reading

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 のクラスとして存在するわけで、それにアクセスするのは、(ヒネた内部構造になっていなければ)さほど難しくないはず…。

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

サンプルコード