获取与文件扩展名

时间:2015-05-06 05:00:14

标签: macos cocoa

我正在寻找一种方法,在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

同样使用kLSRolesEditorkLSRolesAll

0 个答案:

没有答案