Does anyone know of a good way to find (in the filesystem) every app with a given bundle identifier? NSWorkspace
and Launch Services let you look for an app by bundle identifier, but only return a single result. I suspect Spotlight (NSMetadataQuery
) might help, but I'm a bit unclear on its API, so I'm not sure if there's an appropriate key.
There's the command-line lsregister
tool (inside LaunchServices.framework), which can be told to (re)register everything on the system and then dump a report on everything it knows about. Relying on that seems less than ideal, since it's undocumented and parsing its output could be a pain.
(Background: I'm building an app for game modding, and want to provide UI for quickly choosing from a short list of supported games rather than requiring the user to dig through the whole filesystem in an Open panel. However, I expect it's quite likely for a user to have multiple copies of a game installed: release and beta, extra copies for modding, etc.)
This question was asked in 2012 concerning OS X Lion 10.7. As of OS X Yosemite 10.10 the answer is:
LSCopyApplicationURLsForBundleIdentifier
Summary:
Given a bundle identifier (such as com.apple.finder), find all URLs to the corresponding application.
Discussion:
Returns zero or more URLs to applications that have the specified bundle identifier.