ScriptingBridgeの初歩の初歩
今日は社内勉強会でScriptingBridgeについて喋ったので、こちらにも書いておきます。
喋ったと言っても詳しいわけではなく、自分の勉強したことを共有しただけなので、間違いがあれば指摘頂けれると幸いです。
ScriptingBridgeとは、一言で言うと「Cocoaで他のアプリケーションと連携する仕組み」
Windowsで言うところのActiveX(OLE)コントロールです。
ScriptingBridgeは、OS10.5からの機能で、それまではAppleScriptを使わないと連携できなかったようです。
(すみません、AppleScriptは経験がありません)
AppleScript単体ではなく、自分のCocoaアプリケーションに組込むには手間がかかったようで、ScriptingBridgeはそれに比べて簡単という利点があります。
事前準備
Appleのドキュメントによると事前準備がいるようです。
- Scriptingアプリケーションのためのヘッダファイルを生成する
- 生成したヘッダファイルをプロジェクトに追加する
- ヘッダファイルをimportする
- Scripting Bridgeフレームワークをプロジェクトに追加する
ここでのポイントは1です。
iTunesを例にすると、ターミナルで下記を実行すると生成されます。
sdef /Applications/iTunes.app | sdp -fh --basename iTunes
- sdef コマンド:
指定したアプリケーションからスクリプト定義(scripting definitions) をXMLで取得する
- sdp コマンド:
それをObjective-Cのヘッダファイルに加工する
詳しくはManコマンドで・・・
実際に使う
これが拍子抜けするくらい簡単です。
今回はiTunesの現在再生中の曲名とアーティスト名の取得、そして前と後の曲へのスキップです。
まずはヘッダファイルで定義を
iTunesApplication *iTunesApp;
そして、applicationDidFinishLaunchingあたりで
iTunesApp = [SBApplication applicationWithBundleIdentifier: @"com.apple.iTunes"];
もうこれで後はこのインスタンスiTunesAppを使って操作や取得ができます。
再生中の曲名、アーティスト名を取得するなら
NSString *currentTrackName = [iTunesApp.currentTrack name];
NSString *currentArtist = [iTunesApp.currentTrack artist];
前後の曲にスキップするなら
[iTunesApp nextTrack];
[iTunesApp backTrack];
数行で実現してしまいます。
AppleのサンプルコードにはMail.appとFinderを使うのがありますし、他にもScriptingBridgeで連携できるアプリがあるようです。
最後にAppleのドキュメントのリンクを。
Introduction to Scripting Bridge Programming Guide for Cocoa