OSX: 以编程方式获取文件的应用程序列表
OSX: programmatically get list of applications for a file
在查找器中,用户可以右键单击 / "open with" 并查看可用于打开文件的应用程序列表。
如何以编程方式获取此应用程序列表?
ObjC 或 Python 首选,但也很好奇是否有一个命令行实用程序可以公开此功能。
NSArray *applicationURLs = CFBridgingRelease(LSCopyApplicationURLsForURL((__bridge CFURLRef)fileURL, kLSRolesAll));
NSLog(@"applicationURLs %@", applicationURLs);
// 输出
applicationURLs (
"file:///Applications/calibre.app/",
"file:///Applications/Archiver.app/",
"file:///Applications/Pacifist.app/",
"file:///System/Library/CoreServices/Archive%20Utility.app/"
)
对于默认应用:
CFURLRef defaultApplicationForURL = NULL;
LSGetApplicationForURL((__bridge CFURLRef)fileURL, kLSRolesAll, NULL, &defaultApplicationForURL);
NSLog(@"deafultApplicationForURL %@", defaultApplicationForURL);
// 输出
deafultApplicationForURL file:///System/Library/CoreServices/Archive%20Utility.app/
在查找器中,用户可以右键单击 / "open with" 并查看可用于打开文件的应用程序列表。
如何以编程方式获取此应用程序列表?
ObjC 或 Python 首选,但也很好奇是否有一个命令行实用程序可以公开此功能。
NSArray *applicationURLs = CFBridgingRelease(LSCopyApplicationURLsForURL((__bridge CFURLRef)fileURL, kLSRolesAll));
NSLog(@"applicationURLs %@", applicationURLs);
// 输出
applicationURLs (
"file:///Applications/calibre.app/",
"file:///Applications/Archiver.app/",
"file:///Applications/Pacifist.app/",
"file:///System/Library/CoreServices/Archive%20Utility.app/"
)
对于默认应用:
CFURLRef defaultApplicationForURL = NULL;
LSGetApplicationForURL((__bridge CFURLRef)fileURL, kLSRolesAll, NULL, &defaultApplicationForURL);
NSLog(@"deafultApplicationForURL %@", defaultApplicationForURL);
// 输出
deafultApplicationForURL file:///System/Library/CoreServices/Archive%20Utility.app/