ページ

2010年1月22日金曜日

BlogAssistant(8) - Safariプラグインとビューアの分離

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

(前回)Cocoaの日々: BlogAssistant(7) - Safari でリンク登録&サムネイル作成

これまではページクリップとその管理をSafari上ですべてやろうと考えていたが、これを分離する。具体的には、Safari上はクリッピングだけに専念し、その管理は別アプリケーション(別プロセス)で行うようにしたい。

理由は Safariの安定性を保つことと、クリップしたデータを管理するアプリケーションを扱いやすくするため。今やブラウザはネットバンキングや商品購入など行う際に重要な役割を担うまでになっているので、これが不安定になると非常にまずい。自分自身、クレジットカード番号を入れている時に落ちたらとても困る。また余計な機能を盛り込むことで何らかのセキュリティホールが生じてもまずい。管理アプリケーション(ビューア)が Safariと同じプロセス上で動作していると特に安定性で問題を生じやすいし、また見た目もわかりずらい(Safariに寄生する形なので)。そんなこんなで結局管理アプリを別に立てることにした。Safariプラグインとの連携は、とりあえずクリップ後に管理アプリケーションを立ち上げるだけにする。

今回はとりあえずプラグインとアプリの完全分離と連携までやってみる。元々1つの同じXcodeプロジェクトで開発していて、テスト用アプリを作るターゲットを用意してあったのでこれを活用する。

まずターゲット名を整理した。




また以前作ったテストアプリ用ターゲットは BlogAssitant Test App.webplugin などと変な名前になっていたのでこれを修正する。ターゲットの情報を開き、ビルドタブを開く。


この中の「プロダクト名」と「ラッパーの拡張子」でアプリ名を変えられる。

同じ場所で実行パッケージに入れる infoファイルの設定もできる。今は BlogAssistant.App-Info.plist が指定されていて、ビルド時にはこれが Info.plist となって実行パッケージにおさめられる。

それぞれのターゲットビルドすると Debugフォルダにこんなファイルができあがる。

プラグイン側の変更点は、以前のビューアを開くコード(1行)を削除し、その代わりに BlogAssistant.appを開くようにする。
[[NSWorkspace sharedWorkspace] openFile:@"" withApplication:@"BlogAssistant.app"];

ビューア(管理アプリ)側は特に変更なし。


さて実行してみる。

Safari でクリップ。

すると管理アプリケーションが立ち上がる。



なお連続してクリックした場合、管理アプリの方の表示が更新されない。この辺りの連携を今後丁寧に書く必要がある。ところで複数のプロセスから CoreDataへアクセスするとどうなるんだろうか。マルチプロセスに対応していなかった気がする。

ソースコード
GitHubからどうぞ
xcatsan's BlogAssistant at 2010-01-22 - GitHub

-----
今後は次の名称を使う。

BlogAssistant -- 管理アプリケーション
BlogAssistant Plug-in -- Safariプラグイン