Search code examples
macoscocoalaunch-services

How to find multiple apps with same bundle identifier?


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.)


Solution

  • 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.