久方ぶりにこっちに書いてみる。
Lion になってから、launchd がカーネルからのイベントを監視できるようになりました。 これを利用すると、以下のような感じの launchd.plist を作ることで USB ポートにデバイス接続時にアプリを起動できます。
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.microsoft.windows7connector</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/Windows Phone 7 Connector.app/Contents/MacOS/Windows Phone 7 Connector</string>
</array>
<key>LaunchEvents</key>
<dict>
<key>com.apple.iokit.matching</key>
<dict>
<key>MyDevice</key>
<dict>
<key>IOProviderClass</key>
<string>IOUSBDevice</string>
<key>idVendor</key>
<integer>1118</integer>
<key>idProduct</key>
<integer>1260</integer>
</dict>
</dict>
</dict>
</dict>
</plist>
キモは LaunchEvents 項目で、com.apple.iokit.matching イベントの登録。MyDevice のキーは適当でいいと思うけどドキュメントにしたがって。IOUSBDevice でベンダーID 1118, プロダクトID 1260 のデバイスが接続されたとき、を指定しています。
なお、これ何かというと WindowsPhone (IS12T) で、マイクロソフト謹製の WindowsPhone 7 Connector.app を起動しています。アプリ自体に自動機能機能あるのですが、これっ>てバックグラウンドに常駐するのでちょっといやな感じなのですよね。この方法なら launchd なのでそういういやなことなく適切なタイミングで起動してくれます。