Перечислить все установленные приложения в OS X
основная проблема
я ищу решение для перечисления всех приложений, установленных в системе (Mac) OS X, т. е. всех пакетов приложений, зарегистрированных в LaunchServices.
простой подход, который не работает
(обратите внимание: lsregister
можно найти /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
).
в настоящее время я использую вывод lsregister -dump | grep -E '^.*[ t]*path:[ t]+(/.*)$' | grep -Eo '/.*'
, который имеет несколько проблем:
-
.app
связки с новыми линиями (n
, который действителен в UNIX) не обрабатываются правильно (эта проблема будет исправлена путем написания правильного синтаксического анализатора) -
lsregister
не обрабатывает правильно странное имя файла (например, содержащее RTL Марк).lsregister
просто игнорирует файлы с отметкой RTL в их имени. Если вы хотите, вы можете создать файл с RTL в его имени, выполнив следующую команду.python -c 'import shutil; shutil.copytree(u"/Applications/TextEdit.app", u"/Applications/ThisIsAWeirdu202EApp.app")'
после этого
lsregister -dump | grep ThisIsAWeird
будет не раскрыть он. Но когда вы щелкните правой кнопкой мыши на текстовом файле и перейдите к "открыть С", Вы будете, что LaunchServices и Finder по-прежнему поддерживают этот файл.
просто перечисляя все файлы в /Applications
и другие каталоги не работают, потому что LaunchServices знает о пакетах приложений в произвольных папках, и мне также нужны эти приложения.
другие approch, что я не добрался до работы
по-видимому, есть частная функция API под названием _LSFindApplications
что делает именно то, что мне нужно сделать, но я не могу заставить его работать и не нашел никакой официальной документации в интернете. (доказательство его существования:nm /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/LaunchServices | grep __LSFindApplications$
)
UPDATE: метод system_profiler также, похоже, не работает
до сих пор я, хотя system_profiler
метод, предложенный @Anoop работает, но сегодня я узнал, что lsregister
все еще берет больше двоичных файлов. Некоторые или отсутствуют на всех машинах, некоторые, похоже, отсутствуют только в system_profiler
когда вы устанавливали внешнее том с другой установкой OS X. Вот список того, что отсутствует в выводе system_profiler
(входит в lsregister
) на одной из моих машин:
/Applications/Automator.app/Contents/Resources/Application Stub.app
/Applications/Google Chrome.app/Contents/Versions/30.0.1599.69/Google Chrome Framework.framework/Resources/app_mode_loader.app
/Applications/Google Chrome.app/Contents/Versions/30.0.1599.69/Google Chrome Framework.framework/Resources/crash_report_sender.app
/Applications/Google Chrome.app/Contents/Versions/30.0.1599.69/Google Chrome Helper EH.app
/Applications/Google Chrome.app/Contents/Versions/30.0.1599.69/Google Chrome Helper NP.app
/Applications/Google Chrome.app/Contents/Versions/30.0.1599.69/Google Chrome Helper.app
/System/Library/CoreServices/AddPrinter.app
/System/Library/CoreServices/AirPlayUIAgent.app
/System/Library/CoreServices/AppleFileServer.app
/System/Library/CoreServices/AppleGraphicsWarning.app
/System/Library/CoreServices/AppleScript Runner.app
/System/Library/CoreServices/AppleScript Utility.app
/System/Library/CoreServices/CalendarFileHandler.app
/System/Library/CoreServices/Certificate Assistant.app
/System/Library/CoreServices/CoreLocationAgent.app
/System/Library/CoreServices/CoreServicesUIAgent.app
/System/Library/CoreServices/CoreTypes.bundle
/System/Library/CoreServices/Database Events.app
/System/Library/CoreServices/DiskImageMounter.app
/System/Library/CoreServices/Expansion Slot Utility.app
/System/Library/CoreServices/File Sync.app
/System/Library/CoreServices/FileSyncAgent.app
/System/Library/CoreServices/Folder Actions Dispatcher.app
/System/Library/CoreServices/Folder Actions Setup.app
/System/Library/CoreServices/HelpViewer.app
/System/Library/CoreServices/Image Events.app
/System/Library/CoreServices/Install in Progress.app
/System/Library/CoreServices/Jar Launcher.app
/System/Library/CoreServices/Java Web Start.app
/System/Library/CoreServices/KeyboardSetupAssistant.app
/System/Library/CoreServices/Language Chooser.app
/System/Library/CoreServices/LocationMenu.app
/System/Library/CoreServices/MRTAgent.app
/System/Library/CoreServices/Memory Slot Utility.app
/System/Library/CoreServices/NetAuthAgent.app
/System/Library/CoreServices/Network Diagnostics.app
/System/Library/CoreServices/Network Setup Assistant.app
/System/Library/CoreServices/ODSAgent.app
/System/Library/CoreServices/Pass Viewer.app
/System/Library/CoreServices/Printer Setup Utility.app
/System/Library/CoreServices/RegisterPluginIMApp.app
/System/Library/CoreServices/Screen Sharing.app
/System/Library/CoreServices/SecurityAgent.app
/System/Library/CoreServices/SecurityFixer.app
/System/Library/CoreServices/SocialPushAgent.app
/System/Library/CoreServices/System Events.app
/System/Library/CoreServices/System Image Utility.app
/System/Library/CoreServices/SystemUIServer.app
/System/Library/CoreServices/Ticket Viewer.app
/System/Library/CoreServices/UniversalAccessControl.app
/System/Library/CoreServices/UnmountAssistantAgent.app
/System/Library/CoreServices/UserNotificationCenter.app
/System/Library/CoreServices/VoiceOver.app
/System/Library/CoreServices/ZoomWindow.app
/System/Library/CoreServices/backupd.bundle/Contents/Resources/TMLaunchAgent.app
/System/Library/CoreServices/loginwindow.app
/System/Library/CoreServices/rcd.app
/System/Library/Frameworks/PubSub.framework/Versions/A/Resources/PubSubAgent.app
/System/Library/Frameworks/Quartz.framework/Versions/A/Frameworks/QuickLookUI.framework/Versions/A/Resources/QuickLookUIHelper.app
/System/Library/Frameworks/QuickLook.framework/Versions/A/Resources/quicklookd.app
/System/Library/PrivateFrameworks/DiskImages.framework/Versions/A/Resources/DiskImages UI Agent.app
/System/Library/Services/AppleSpell.service
/System/Library/Services/ChineseTextConverterService.app
/System/Library/Services/ImageCaptureService.app
/System/Library/Services/OpenSpell.service
/System/Library/Services/SpeechService.service
/System/Library/SocialServices/Facebook.socialplugin
/System/Library/SocialServices/Twitter.socialplugin
/System/Library/SocialServices/Weibo.socialplugin
3 ответов
во-первых, ваш запрос не совсем правильно:
Я ищу решение для перечисления всех приложений, установленных в системе (Mac) OS X, т. е. всех пакетов приложений, зарегистрированных в LaunchServices.
это не одно и то же. Приложениях зарегистрирована LaunchServices-это выход lsregister -dump
. Это не то же самое, что "все установленные приложения."Нет точного запроса для "всех установленных приложений."OS X делает у меня даже нет такого понятия.
выход system_profiler
эквивалентно тому, о чем знает Spotlight. Это не совсем полный список установленных приложений и может быть неправильным в нескольких случаях. Например, Spotlight может быть отключен или не завершил первое сканирование. (Нет поддерживаемого способа спросить Spotlight, закончил ли он свое первое сканирование; radar 15177626.)
есть еще pkgutil --pkgs
, который предоставит вам дополнительные "установлен вещи."Он также не завершен и может перечислять вещи, которые не установлены.
вы также можете использовать mdfind
чтобы пройти весь диск и посмотреть, что называет себя приложением. Это довольно эффективно, но медленно.
вы также можете использовать locate .app | grep '\.app$'
что довольно эффективно, если база данных locate обновлена, и вам нужны только пакеты приложений.
Я спросил Apple об этом на WWDC. Нет простого, поддерживаемого ответа. Откройте радар. Вы можете попросить обмануть 15177489.
В терминала:
system_profiler SPApplicationsDataType > list_of_all_apps.txt
... записывает результат запроса system_profiler в этот текстовый файл.
Как насчет поиска с помощью приложения/кода Cocoa, как сделано здесь.
кроме того, вы можете использовать, чтобы использовать system_profiler -xml SPApplicationsDataType
а затем проанализируйте полученные XML-данные, чтобы получить только те приложения, которые вас интересуют.