2017-06-27 80 views
2

我開發在Xcode MacOS的應用程序。我需要做的一件事就是打開URL的系統詳細網頁瀏覽器。我有一個彈出的警告,給用戶這個選項。警報應顯示默認Web瀏覽器的名稱。但是我無法弄清楚默認網頁瀏覽器的名稱。獲取MacOS的默認瀏覽器的名字 - LSCopyDefaultApplicationURLForContentType

我有試過下面的代碼:

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

它只是返回即使我的默認瀏覽器設置爲Safari瀏覽器file:///Applications/Opera.app/。無論我將默認瀏覽器更改爲(Chrome,Safari,Firefox等),上述方法僅返回Opera瀏覽器的URL。

有誰知道我怎麼能找出什麼是默認瀏覽器的名稱是什麼?我知道如何在默認瀏覽器中打開URL,這很容易,但獲取默認瀏覽器的名稱不是。

我知道這是可能的,因爲應用程序,如Tweetbot,有一個選項說「在Safari中打開」,這改變了,無論你的默認瀏覽器是。

感謝您的時間,丹。

回答

1

您可以使用[[NSWorkspace sharedWorkspace] open:url]在默認瀏覽器中打開任何URL,並使用[[NSWorkspace sharedWorkspace] URLForApplicationToOpenURL: url]獲取給定URL的默認應用程序的URL。

要獲取應用程序的名稱,儘量[[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'。我會用最新的更新我的答案,因爲它是兩者中唯一需要的答案。你可以在這裏找到其他相關鍵值: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));