我正在Xcode中开发一个macOS应用程序。我需要做的一件事就是打开URL系统详细的Web浏览器。我弹出一个警告,为用户提供此选项。警报应显示默认Web浏览器的名称。但是,我无法确定默认Web浏览器的名称。
我尝试了以下代码:
NSLog(@"%@", LSCopyDefaultApplicationURLForContentType(kUTTypeURL, kLSRolesAll, nil));
即使我的默认浏览器设置为Safari,它也会返回file:///Applications/Opera.app/
。无论我将默认浏览器更改为(Chrome,Safari,Firefox等),上述方法只返回Opera浏览器的URL。
有谁知道如何找出默认浏览器的名称是什么?我知道如何在默认浏览器中打开URL,这很容易,但是获取默认浏览器的名称不是。
我知道这是可能的,因为像Tweetbot这样的应用程序有一个选项说“在Safari中打开”,它会改变你默认的浏览器。
谢谢你的时间,Dan。
答案 0 :(得分:2)
您可以使用[[NSWorkspace sharedWorkspace] open:url]
在默认浏览器和[[NSWorkspace sharedWorkspace] URLForApplicationToOpenURL: 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
答案 1 :(得分:1)
尝试其他LaunchServices方法LSCopyDefaultApplicationURLForURL
并传递http
方案
CFURLRef httpURL = CFURLCreateWithString(kCFAllocatorDefault, CFSTR("http://"), NULL);
NSLog(@"%@", LSCopyDefaultApplicationURLForURL(httpURL, kLSRolesAll, nil));
答案 2 :(得分:0)
在 Swift 5 上使用 accepted answer
var defaultBrowser: String? {
NSWorkspace.shared.urlForApplication(toOpen: URL(string: "http://")!)
.flatMap(Bundle.init(url:))
.flatMap {
$0.object(forInfoDictionaryKey: "CFBundleDisplayName") ?? $0.object(forInfoDictionaryKey: "CFBundleName")
}.flatMap {
$0 as? String
}
}