cocoa获取已安装应用程序的列表

时间:2014-01-13 12:38:20

标签: objective-c macos cocoa

有没有办法在cocoa中为当前用户安装所有已安装的应用程序?

NSArray *runningApps = [[NSWorkspace sharedWorkspace] launchedApplications];

上面给出了我当前正在运行的应用程序,但对于我的应用程序,我需要列出所有已安装的应用我需要应用程序密钥(例如com.apple.appname),因此system_profiler将不起作用。

1 个答案:

答案 0 :(得分:9)

对于OSX,用于收集有关可启动应用程序的信息的密钥库是启动服务(请参阅Apple的Launch Services Programming Guide),它将为您提供有关应用程序的信息,例如包ID,它接受的文件类型等。

要实际查找计算机上的所有可执行文件,您可能希望以一种形式或另一种形式使用Spotlight(API或通过调用mdfind)。

使用命令行版本的示例:

mdfind "kMDItemContentType == 'com.apple.application-bundle'"

将返回所有应用程序路径的列表。

在Spotlight API中使用类似术语将生成一个合适的列表,然后您可以使用NSBundle打开主捆绑包,或使用启动服务检索有关该应用程序的信息。

我没有时间对此进行全面测试,但基本代码为:

NSMetadataQuery *query = [[NSMetadataQuery alloc] init];        
[query setSearchScopes: @[@"/Applications"]];  // if you want to isolate to Applications
NSPredicate *pred = [NSPredicate predicateWithFormat:@"kMDItemContentType == 'com.apple.application-bundle'"];

// Register for NSMetadataQueryDidFinishGatheringNotification here because you need that to
// know when the query has completed

[query setPredicate:pred];
[query startQuery]; 

(修改为使用@ John独立于本地化的查询而不是原始查询)