プレビューは開くことができたので、こんどは起動するアプリケーションを環境設定で自由に選べるようにする。
イメージはファインダの「このアプリケーションで開く」
さてこれを実現するにはファイルを開くのに適したアプリケーションを取得する必要がある。デフォルトのアプリは NSWorkspace#getInfoForFile:application:type: で取れそうだが、オープン可能なアプリ一覧となると NSWorkspace では役不足のようだ。
MacOSXには Launch Services という API が用意されていれていて、このあたりを扱うことができる。
Launch Services Programming Guide
このAPIの中に LSCopyApplicationURLsForURL という関数が用意されていて、これが使えそうだ。
(参考)Re: Get list of possible applications
早速サンプルアプリを作って試してみる。
サンプル:FindingAllApps-1.zip
実行するとソースに付随している画像ファイル pro.jpg を開くことができるアプリの一覧がコンソールへ出力される。
コードはこんな感じ。
NSString* path = [[NSBundle mainBundle] pathForImageResource:@"pro"];
NSURL* url = [NSURL fileURLWithPath:path];
NSArray* array = [(NSArray*)LSCopyApplicationURLsForURL((CFURLRef)url, kLSRolesAll) autorelease];
NSLog(@"%@", array);
実行結果。