iPhotoプラグインを作る「フォト蔵編」-1 : iPhotoプラグインの作り方-1 : サンプルソースを触る
まずは、iPhotoプラグインの作り方を調べます。。。と、Appleのサイトを見ても何にも載ってませんねえ。。。
いろいろ、徘徊した結果、わかったこと。iPhotoプラグインの作成なんて公式にサポートされているものじゃなさそう。いわば、みなさんがハックした結果ってこととでもいうんですかね。
そんなわけで、参考にしたのは、以前のエントリーにもあった二つの英語サイト。特に後者のほうがサンプルソースもあって読みやすいです。
で、こちらから、サンプルを落としつつ、その手順に従って、プラグインのひな形を作っていきます。
サンプルを動かす
とりあえず、サンプルプロジェクトを動かしてみましょう。
ビルドして、ExampleExport.iPhotoExpoter を iPhoto.app/Contents/PlugIns 以下にコピーします。
で、iPhotoを起動時、「書き出し」メニューを選べば、サンプルのGUIがみえるはず、、、だったんですが、どうもうまくいってません。コンソールログを見ると
Not a valid plugin: /Applications/iPhoto.app/Contents/PlugIns/
ExampleExport.iPhotoExpoter
ってでてます。これって、もしかしたら、サンプルが古いから?(テスト環境は10.5 + iPhoto'08)と思い、いったん中断。先に iPhoto の現状を確認(つまりクラスダンプ)することにしましょう。
class dumpする
これぞ、まさに第一歩。Cocoaの実行バイナリからクラス構造をダンプします。class-dump
コマンドの実行ファイルは、こちらのサイトからもらってきて、適当にパスの通った場所に設置。
で、こんな感じで実行。
# class-dump -C Export /Applications/iPhoto.app/Contents/MacOS/iPhoto > iPhoto.class
これでiPhoto内の"Export"っていうシンボルを持つクラス(プロトコル含む)のインターフェースがテキストファイルに出力されます。なんて便利。初めて使ったんですけれど、こうやってみなさんは裏口を開けていくのね、と。
ダンプしたインターフェースをヘッダへ
ダンプしたテキストファイルから必要なものをインクルードヘッダとして使います。主にはこんな感じで。
- ExportMgr → ExportMgr.h : iPhoto書き出しに使用(選択ファイルの情報などを取得)
- ExportPluginProtocol → ExportPluginProtocol.h : プラグインプロトコルそのもの(これを実装すればよい)
- ExportPluginBoxProtocol → ExportPluginBoxProtocol.h : NSBoxのサブクラスで使用
- ExportImageProtocol → ExportImageProtocol.h
ヘッダを比較
ここで、先ほどのサンプルヘッダと、ダンプして作ったヘッダを比較してみました。確かに過不足ありましたね。今回の場合は、-(BOOL)handlesMovieFiles;
が増えているようです。
なので、早速サンプルソースに空実装を追加して、再度プラグインとして組み込んでみます。
すると、確かに「書き出し」ウィンドウ内に新しいタブがあらわれてきました。なるほどなるほど、こうやって読み込まれていくのね、というわけで、「書き出し」ボタンを押してみます。。。が、それはそれで、なにやらメソッドが存在しないとかいうエラーをコンソールにはいておしまい。これまたソースを比較してみると、ExportMgr のメソッドがずいぶんと変わっているみたいです。
まあ、これはこれで、プラグイン読み込みとデータ書き出しの雰囲気がなんとなくわかったので、よしとしましょう。次は実際に自分でプラグインを書いてみます。