2014-01-13 4 views
4

Есть ли способ получить все установленные приложения для текущего пользователя в какао?Какао получить список установленных приложений

NSArray *runningApps = [[NSWorkspace sharedWorkspace] launchedApplications]; 

Вышеприведенное дает мне текущие приложения, но для моего приложения мне нужно указать все установленные приложения. Мне нужен ключ приложения (например, com.apple.appname), поэтому system_profiler не будет работать.

+0

http://stackoverflow.com/questions/3444326/list-all-applications-output ий текст файл –

+0

Вот решение: [как получить все установленные applicaitons (StackOverflow)] [1] [1]: http://stackoverflow.com/questions/31700347/how- to-get-all-installed-applications-with-objective-c-in-osx/31701135 # 31701135 –

+1

@VikasBansal - ключевое различие между решением, на которое вы указываете, и t он один, который я предусмотрел, - это то, что мое приложение найдет приложения на всей машине (если вы удалите строку области видимости) и будет возвращать только фактические приложения, а не другие файлы в каталоге '/ Applications'. – gaige

ответ

7

Для OSX, ключ библиотеки для сбора информации о спускаемых приложениях Launch Services (см от Apple Launch Services Programming Guide), который даст вам информацию о приложении, таких как расслоение ид, типы файлов, которые он принимает, и т.д.

Для того, чтобы найти все исполняемые файлы на компьютере, вы захотите использовать Spotlight в той или иной форме (либо API, либо вызывая mdfind).

Пример использования версии командной строки:

mdfind 'kMDItemKind=Application' 

возвращает список всех путей применения.

Использование аналогичного термина в API прожектора приведет к соответствующему списку, из которого вы можете либо открыть основной комплект, используя NSBundle, либо использовать Launch Services для получения информации об этом приложении.

У меня нет времени, чтобы сделать тщательное испытание, но основной код будет:

NSMetadataQuery *query = [[NSMetadataQuery alloc] init];   
[query setSearchScopes: @[@"/Applications"]]; // if you want to isolate to Applications 
NSPredicate *pred = [NSPredicate predicateWithFormat:@"kMDItemKind == 'Application'"]; 

// Register for NSMetadataQueryDidFinishGatheringNotification here because you need that to 
// know when the query has completed 

[query setPredicate:pred]; 
[query startQuery]; 
+1

Спасибо. Для кого-то интересно, вы можете использовать следующее для notificaiton: [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector (имя запросаFinish :): NSMetadataQueryDidFinishGatheringNotification object: nil]; – Kamran224

+2

Осторожно, kMDItemKind локализован. Вместо этого вы можете использовать «kMDItemContentType ==» com.apple.application-bundle ». – John

Смежные вопросы