Как я могу узнать, какие приложения установлены в OS X, используя Objective C или Macruby? - PullRequest
5 голосов
/ 04 мая 2010

Не могли бы вы сказать мне, пожалуйста - какой объект и какой метод я могу использовать для получения информации об установленных приложениях на OSX с целью c или macruby?

Ответы [ 7 ]

4 голосов
/ 04 мая 2010

Если вы намеревались перечислить все приложения с графическим интерфейсом, вы можете использовать Launch Services . Список функций см. в справочнике .

.

Не перечислять вручную .app связок! Это уже сделано системой, и вам просто нужно запросить ее. Существует программа командной строки с именем lsregister в

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister

, который можно использовать для получения подробного дампа базы данных Launch Service. Этот инструмент иногда полезен, но не зависит от этого в программе доставки,

3 голосов
/ 04 мая 2010

Вы можете просто вызвать инструмент командной строки Apple system_profiler, например,

% system_profiler SPApplicationsDataType

Для C или Objective-C вы можете использовать system() для этого.

Для получения дополнительной информации:

% man system

% man system_profiler

2 голосов
/ 04 мая 2010

OS X на самом деле не имеет понятия «установка приложения».Приложения OS X представляют собой автономные пакеты, которые отображаются в Finder в виде одного виртуального файла.Центрального реестра нет, есть соглашение о том, что приложения помещаются в / Applications или ~ / Applications для "установки" для каждого пользователя.

Самое лучшее, что вы можете сделать, это перечислить эти каталоги для их содержимого, и каждыйКаталог ".app", который вы найдете, является приложением.Это не будет исчерпывающим (я часто запускаю небольшие приложения, например, с моего рабочего стола, если я только что их скачал).

1 голос
/ 04 декабря 2013

Я переехал следующим образом:

  • выполнить команду system_profiler SPApplicationsDataType -xml из кода. Ключ SPApplicationsDataType означает, что требуются только данные приложения. -xml означает, что я ожидаю увидеть результат xml для более простого анализа.

  • массив результатов анализа

Здесь вы можете найти хороший пример выполнения команды из кода: Выполнить команду терминала из приложения Какао

Пример всего кода выглядит следующим образом:

NSStirng * commangString = @"system_profiler SPApplicationsDataType -xml"; 
NSData * resultData = [CommandLineTool runCommand:commangString];
NSArray * appArray = [PlistManager objectFromData:resultData];
// parse array of NSDictionaries here ....



// method from PlistManager
+ (id) objectFromData: (NSData *) data {
    NSString *errorString = nil;
    NSPropertyListFormat format;
    id object = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListMutableContainers format:&format errorDescription:&errorString];
    if (!errorString) {
        return object;
    } else {
        NSLog(@"Error while plist to object conversion: %@", errorString);
        return nil;
    }
}

// runCommand method was used from post I mentioned before
0 голосов
/ 24 апреля 2018
[[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:@"com.google.Chrome"];

Возвращает путь к Google Chrome приложению, если оно установлено, nil в противном случае.

Если вы не знаете BundleID, его можно найти двумя способами:

1) Откройте .plist файл приложения, щелкнув правой кнопкой мыши значок приложения и выбрав параметр Show Package Contents.

Путь к Chrome .plist по умолчанию: /Applications/Google\ Chrome.app/Contents/Info.plist

2) Используйте lsregister вместе с grep.

Попробуйте ввести в приложение Terminal следующее: там вы найдете BundleID:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -dump | grep -i chrome
0 голосов
/ 26 декабря 2017

Использовать Spotlight через NSMetadataQuery.

Вы можете просмотреть результаты, которые вы получите, используя mdfind в командной строке:

mdfind "kMDItemContentType == 'com.apple.application-bundle'"

Работает как шарм и очень-очень быстро.

0 голосов
/ 04 мая 2010

Поскольку это Unix-подобная ОС, нет реального способа сообщить, что вы установили (если, конечно, вы не контролируете другое приложение - тогда есть множество способов сделать это по очевидным причинам).

Обычно приложения помещаются в / Applications или ~ / Applications, НО вы можете запускать его из любого места, а не из этих папок (как на Unix-машине)

...