有没有办法在可可中获取当前用户所有已安装的应用程序?
NSArray *runningApps = [[NSWorkspace sharedWorkspace] launchedApplications];
上面给出了我当前正在运行的应用程序,但对于我的应用程序,我需要列出所有已安装的应用程序。我需要应用程序密钥(例如 com.apple.appname),因此 system_profiler 将不起作用。
对于 OSX,收集有关可启动应用程序信息的关键库是 Launch Services(请参阅 Apple 的启动服务编程指南),这将为您提供有关应用程序的信息,例如捆绑包 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 的本地化独立查询而不是我原来的查询)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)