ric*_*ter 6 macos cocoa launch-services
有没有人知道找到(在文件系统中)具有给定包标识符的每个应用程序的好方法?NSWorkspace和启动服务允许您按包标识符查找应用程序,但只返回单个结果.我怀疑Spotlight(NSMetadataQuery)可能有所帮助,但我对它的API有点不清楚,所以我不确定是否有合适的密钥.
有一个命令行lsregister工具(在LaunchServices.framework内部),可以告诉它(重新)注册系统上的所有内容,然后转储它所知道的所有内容的报告.依赖于它似乎不太理想,因为它没有文档,解析它的输出可能是一个痛苦.
(背景:我正在构建一个用于游戏修改的应用程序,并希望提供用于从支持的游戏的简短列表中快速选择的UI,而不是要求用户在Open面板中挖掘整个文件系统.但是,我希望它相当可能是用户安装了多个游戏副本:发行版和测试版,用于修改的额外副本等)
您需要kMDItemCFBundleIdentifierSpotlight /元数据键.
pierre$39> mdfind "kMDItemCFBundleIdentifier == 'org.videolan.vlc'"
/Applications/VLC.app
/Applications/vlc-0.8.6c/VLC.app
Run Code Online (Sandbox Code Playgroud)
从那里它应该只是对文件元数据API进行正确调用(选择你的毒药,碳或可可).有趣的是,这个密钥没有很好地记录:它不在文件元数据属性参考中,尽管它在MDItem参考中.
再一次,它表明游戏改装工具提高了其他类型的应用程序引发的用例,而且有时苹果不能很好地服务 ...... </ soapbox>
附录:一旦你有了你的清单,在我看来,向用户展示它的最好方法是列出kMDItemVersion你找到的每个项目的版本(); 你也可能会显示路径,但版本可能对用户来说是最有用的东西(毕竟,他可能会保留不同的实例以便拥有特定的版本).
这个问题是在 2012 年针对 OS X Lion 10.7 提出的。从 OS X Yosemite 10.10 开始,答案是:
LSCopyApplicationURLsForBundleIdentifier
概括:
给定包标识符(例如 com.apple.finder),查找相应应用程序的所有 URL。
讨论:
返回零个或多个具有指定包标识符的应用程序的 URL。
| 归档时间: |
|
| 查看次数: |
3405 次 |
| 最近记录: |