2012年9月28日金曜日

Cocoaアプリケーション間の通信について

OS X のコアはBSDです.なので,Cocoaアプリケーション間の通信にも,ちょっと反則だけれども,いかにもUNIXな方法が使えます.

Cocoaアプリケーション間の通信は,Finder関係なら NSWorkspace を,一般的なイベント送信なら AppleScript のメカニズムを,本格的なオブジェクト間通信なら Objective-C のオブジェクト間メッセージング機能を使うことが望ましいとされています.というより,Objective-C はオブジェクト間のメッセージングを初めから想定して設計されています.

とはいえ、面倒臭い時もありますよね.

そんなときはパイプを使いましょう.まずホームディレクトリにでもコマンドラインから mkfifo datapipe としてパイプを作って下さい.

あとは,メッセージを受け取りたいアプリケーションから,ノンブロッキングモードでdatapipeをopenします.ついで,ランループの何処かでreadが1以上を返す限りdatapipeからデータを読み出します.

メッセージを送りたいアプリケーションは,datapipeをノンブロッキングモードでopenし,適当にwriteします.先にデータ受け取り側が起動していないと,writeは異常終了しますぞ.

2012年9月20日木曜日