Проверьте, присутствует ли приложение Mac OS X - PullRequest
9 голосов
/ 01 марта 2011

Я вспоминаю, что существует инфраструктура Какао или словарь AppleScript, чтобы проверить, установлен ли вообще пакет приложений с определенным именем где-либо на компьютере.

Как мне это сделать? Мне могут пригодиться какао, AppleScript или командная строка.

Ответы [ 3 ]

21 голосов
/ 01 марта 2011

Вы должны использовать Launch Services , чтобы сделать это, в частности, функцию LSFindApplicationForInfo().

Вы используете это так:

#import <ApplicationServices/ApplicationServices.h>

CFURLRef appURL = NULL;
OSStatus result = LSFindApplicationForInfo (
                                   kLSUnknownCreator,         //creator codes are dead, so we don't care about it
                                   CFSTR("com.apple.Safari"), //you can use the bundle ID here
                                   NULL,                      //or the name of the app here (CFSTR("Safari.app"))
                                   NULL,                      //this is used if you want an FSRef rather than a CFURLRef
                                   &appURL
                                   );
switch(result)
{
    case noErr:
        NSLog(@"the app's URL is: %@",appURL);
        break;
    case kLSApplicationNotFoundErr:
        NSLog(@"app not found");
        break;
    default:
        NSLog(@"an error occurred: %d",result);
        break;          
}

//the CFURLRef returned from the function is retained as per the docs so we must release it
if(appURL)
    CFRelease(appURL);
3 голосов
/ 01 марта 2011

Из командной строки это, кажется, делает это:

> mdfind 'kMDItemContentType == "com.apple.application-bundle" && kMDItemFSName = "Google Chrome.app"'
1 голос
/ 01 марта 2011

Вы также можете использовать lsregister.

on doesAppExist(appName)
    if (do shell script "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep com.apple.Safari") ¬
    contains "com.apple.Safari" then return true
end appExists

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...