macos - 如何找到具有相同捆绑标识符的多个应用程序?

标签 macos cocoa launch-services

有谁知道找到(在文件系统中)每个具有给定包标识符的应用程序的好方法吗? 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/

相关文章:

macos - Mac OS X 文件关联有效,但文件图标未更改

ios - SwiftUI:显示重复按钮且未触发操作的催化剂警报

html - 下拉菜单中的颜色变化不适用于 iPad,适用于其他一切

objective-c - UIRequiredDeviceCapabilities 等同于 Mac App Store?

objective-c - 为最前面的应用程序生成键盘事件

macos - 对于共存的旧版和现代 Mac 应用程序,无法将全局捆绑文档与现代应用程序关联(启动服务?)

regex - Bash 正则表达式捕获

objective-c - 将 Swift 翻译成 Objective-C 可能吗?

ios - 为什么实例变量被苹果认为是不好的做法?

safari - 无论系统浏览器设置为什么,都可以使用 Safari 打开 URL