Как проверить, где находится приложение под OS X?

Как проверить местоположение приложения, установленного в OS X? Я попробовал это с помощью метода LSFindApplicationForInfo, и он отлично работает, если вы ищете идентификатор пакета.

Но этот способ не работает, если вы установили более одного экземпляра приложения. LSFindApplicationForInfo просто получает местоположение одного экземпляра приложения. Кроме того, эта функция устарела в OS X 10.10.

Вход терминала mdfind "kMDItemCFBundleIdentifier из следующего потока работает нормально, но он работает только при включенном прожекторе.

Как получить местоположения всех экземпляров приложения с одним и тем же идентификатором пакета или одним и тем же именем «name.app» внутри исходного кода, написанного на C или Objective-C?

Как найти несколько приложений с одинаковым идентификатором пакета?

Проверьте, присутствует ли приложение Mac OS X


person 3ef9g    schedule 26.02.2015    source источник
comment
Вы ищете собственное приложение, свойства которого вы можете контролировать? Или вы про общий случай спрашиваете?   -  person Ken Thomases    schedule 26.02.2015
comment
Я разрабатываю приложение, которое должно проверять, присутствует ли в системе другое специальное приложение. Если да, мне нужен для каждого экземпляра полный системный путь к специальному приложению. Например, если приложение находится на рабочем столе и в то же время внутри папки приложения (может быть, как более старая версия), то я хотел бы знать следующие пути: /Пользователи/.../Рабочий стол/имя.приложение, а также / Приложения/название.app   -  person 3ef9g    schedule 27.02.2015


Ответы (1)


Если вы можете ориентироваться на 10.10 или более позднюю версию, вы можете использовать LSCopyApplicationURLsForBundleIdentifier(). Это задокументировано как возврат URL-адресов всех приложений с заданным идентификатором пакета.

Мне непонятно, является ли приложение, которое вы пытаетесь найти, тем, свойства которого вы контролируете. Если это так, и вам необходимо поддерживать версии OS X до 10.10, один из подходов, который вы можете использовать, — это сделать заявление целевого приложения о поддержке пользовательской схемы фиктивного URL-адреса. Затем вы можете использовать LSCopyApplicationURLsForURL(), чтобы найти все его экземпляры. Вы создаете URL-адрес со своей фиктивной схемой, такой как com-yourcompany-yourproduct-app-identifier-scheme://junk, и передаете ее в качестве входных данных.

person Ken Thomases    schedule 28.02.2015