有谁知道找到(在文件系统中)每个具有给定包标识符的应用程序的好方法吗? NSWorkspace
和 Launch Services 允许您通过包标识符查找应用程序,但只返回一个结果。我怀疑 Spotlight ( NSMetadataQuery
) 可能会有所帮助,但我对它的 API 有点不清楚,所以我不确定是否有合适的 key 。
有命令行 lsregister
工具(在 LaunchServices.framework 中),它可以被告知(重新)注册系统上的所有内容,然后转储它所知道的所有内容的报告。依赖它似乎不太理想,因为它没有记录并且解析其输出可能会很痛苦。
(背景:我正在构建一个用于游戏修改的应用程序,并希望提供 UI 以便从支持的游戏的简短列表中快速选择,而不是要求用户在打开面板中挖掘整个文件系统。但是,我希望它相当用户可能安装了多个游戏副本:发行版和测试版,用于修改的额外副本等)
最佳答案
您想要 kMDItemCFBundleIdentifier
聚光灯/元数据键。
pierre$39> mdfind "kMDItemCFBundleIdentifier == 'org.videolan.vlc'"
/Applications/VLC.app
/Applications/vlc-0.8.6c/VLC.app
从那里开始,只需正确调用 file metadata APIs 即可。 (选择你的毒药,碳或 cocoa )。有趣的是,这个 key 并没有被很好地记录下来:它不在 File Metadata Attributes Reference 中。 ,虽然它在 MDItem Reference .
再一次,它表明游戏修改工具引发的用例很少有其他类型的应用程序引发,that sometimes aren't very well served by Apple ... 肥皂盒>
附录:一旦你有了你的 list ,我认为向用户展示它的最好方法是列出你找到的每个项目的版本(
kMDItemVersion
);您也可以显示路径,但版本可能对用户最有用(毕竟,他可能会保留不同的实例以获得特定版本)。
关于macos - 如何找到具有相同捆绑标识符的多个应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841043/