2009-05-31 9 views
7

OS Xシステムにインストールされているブラウザをローカルアプリケーションからどのように列挙しますか?私は好き嫌いのようなものを作りたいと思っていますが、異なるもの(長い話)です。しかし、私はシステムにインストールされているすべてのブラウザを列挙したいと思います。OS Xにインストールされているブラウザを列挙する

Windowsでは、既定のプログラムレジストリにインストールされているブラウザを使用することはできますが、OS Xには同様の概念があるとは思われません。すべてのバンドルを手作業で検索する必要がありますか?& info.plistファイル?

答えて

9

LSCopyAllHandlersForURLScheme(CFSTR("http"))またはLSCopyAllRoleHandlersForContentType(CFSTR("public.html"), kLSRolesViewer)またはsetintersectionの両方を使用してください。

これら2つの関数はバンドル識別子を返します。 LSFindApplicationForInfoを使用して、アプリケーションのディスク上の優先インスタンスをそのバンドルIDで見つけることができます。

the Core Foundation memory-management rulesに従うことを忘れないでください。)

編集:この回答にコメントでは、smorganは、最初の呼び出しの代替として(つまり、HTTP です)LSCopyAllHandlersForURLScheme(CFSTR("https"))を示唆しています。これは良い提案です。この

NSArray* apps = (NSArray*)CFBridgingRelease(LSCopyAllHandlersForURLScheme(CFSTR("https"))) ; 
NSLog(@"%@", apps); 

このデフォルトのためのリストに

+0

は、私は、これらはカーボンのAPIです気づきました。私はCarbonが廃止予定だと思った? –

+3

Launch Servicesは、CarbonではなくCore Servicesの一部です。このように、非推奨ではなく、64ビット版で利用可能です。 (http://developer.apple.com/documentation/Carbon/Reference/LaunchServicesReference/のドキュメントを参照してください) –

+2

"http"の代わりに "https"を使いたいかもしれません。私の経験では、後者のほうが偽陽性本当にブラウザであるもののために。 – smorgan

0

チェック:

NSString* defaultBundleId = (__bridge NSString*)LSCopyDefaultHandlerForURLScheme(CFSTR("https")); 
NSLog(@"default is %@", defaultBundleId); 
関連する問題