我正在寻找一种方法,在Cocoa中,获取与文件扩展名相关的所有应用程序或与Finder用Open With >
菜单执行的操作相似的程序。
我已经研究过启动服务,我认为这可能是正确的道路,但似乎缺少应用程序。我不认为这是对的。
例如,我安装了 Sublime Text 和 Visual Studio代码。两者都显示在Open With >
文档的查找器的.html
菜单中。当我在Cocoa中尝试这个时,两者都被排除在外:
var handlers = LSCopyAllRoleHandlersForContentType("public.html", kLSRolesEditor).takeUnretainedValue()
var identifiers: [String] = handlers as! [String]
for id in identifiers {
var path = NSWorkspace.sharedWorkspace().absolutePathForAppBundleWithIdentifier(id)
var name = NSFileManager.defaultManager().displayNameAtPath(path!)
println(name)
}
我尝试了以下具有相同排除结果的内容类型:
public.html
public.source-code
public.text
public.plain-text
这些都不会产生包含 Sublime Text 或 Visual Studio代码的包标识符列表。
我还尝试了所有这些内容类型变体,将角色再次更改为kLSRolesAll
,结果与我的期望不符。
我只能假设必须有其他方法来检索给定文件扩展名的应用程序列表,而不是我在Google搜索中忽略的启动服务相关。
我还尝试使用objective-c进行以下操作:
NSURL* url = [[NSURL alloc] initFileURLWithPath:@"file:///path/to/an/html/file/index.html"];
CFArrayRef urls = LSCopyApplicationURLsForURL((__bridge CFURLRef)url, kLSRolesEditor);
NSArray *appUrls = CFBridgingRelease(urls);
NSLog(@"%li", appUrls.count); // 0
同样使用kLSRolesEditor
和kLSRolesAll