2017-06-27 8 views
2

私はXcodeでmacOSアプリケーションを開発しています。私がしなければならないことの1つは、URLのシステム・ディト・ウェブ・ブラウザを開くことです。私はユーザーにこのオプションを与えるポップアップアラートを持っています。アラートには、デフォルトのWebブラウザの名前が表示されます。しかし、私はデフォルトのWebブラウザの名前を把握することができません。MacOSのデフォルトブラウザ名を取得する - LSCopyDefaultApplicationURLForContentType

私は、次のコードを試してみました:それはちょうど私のデフォルトのブラウザがSafariのに設定されていてもfile:///Applications/Opera.app/を返し

NSLog(@"%@", LSCopyDefaultApplicationURLForContentType(kUTTypeURL, kLSRolesAll, nil)); 

を。既定のブラウザを(Chrome、Safari、Firefoxなど)に変更しても、上記のメソッドはOperaブラウザのURLを返します。

デフォルトのブラウザの名前はどのようにわかりますか?私は、デフォルトのブラウザでURLを開く方法を知っています。とても簡単ですが、デフォルトのブラウザの名前を取得することはできません。

Tweetbotのようなアプリには、「Safariで開く」というオプションがあり、デフォルトのブラウザに変更されているため、これが可能です。

お時間をありがとうございました。

答えて

1

[[NSWorkspace sharedWorkspace] open:url]を使用してデフォルトブラウザの任意のURLを開き、[[NSWorkspace sharedWorkspace] URLForApplicationToOpenURL: url]を使用して、特定のURLのデフォルトアプリケーションのURLを取得できます。

アプリ名を取得するには、最初がnullの場合は[[NSBundle bundleWithURL:appUrl] objectForInfoDictionaryKey:@"CFBundleDisplayName"]または[[NSBundle bundleWithURL:appUrl] objectForInfoDictionaryKey:@"CFBundleName"]を試してください。どちらも失敗した場合は、最後の手段として[appUrl deletingPathExtension] lastPathComponent]を使用できます。

こちらのドキュメントを参照してください:

https://developer.apple.com/documentation/appkit/nsworkspace/1533463-openurl?language=objc

https://developer.apple.com/documentation/appkit/nsworkspace/1533391-urlforapplicationtoopenurl?language=objc

https://developer.apple.com/documentation/foundation/nsbundle/1408696-objectforinfodictionarykey?language=objc

+0

感謝を渡します非常に近いですが、かなりありません。私は '' [[[NSBundle bundleWithURL:test] infoDictionary] valueForKey:@ "CFBundleExecutable"] '' 'を使って名前を取得しなければなりませんでした。あなたの方法は機能しませんでした。 – Supertecnoboff

+0

NSWorkspaceのアプローチは私が必要なものですが、とてもありがとうございます。 – Supertecnoboff

+0

'CFBundleExecutable'は、実行可能ファイル名を返します。これは、表示されたアプリケーション名と異なる場合があります。また、アプリケーション名はローカライズされていてもよく、 'CFBundleExecutable'はそうではありません。 'CFBundleName'か' CFBundleDisplayName'を試してみてください。私は2つのうちの唯一の必要なものなので、最新のもので私の答えを更新します。関連する他のキーはこちらから入手できます:https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html –

0

を他のLaunchServices方法LSCopyDefaultApplicationURLForURLを試してみて、httpスキーム

CFURLRef httpURL = CFURLCreateWithString(kCFAllocatorDefault, CFSTR("http://"), NULL); 
NSLog(@"%@", LSCopyDefaultApplicationURLForURL(httpURL, kLSRolesAll, nil)); 
関連する問題