2013-03-01 12 views
7

Grundproblem

Ich bin Suche nach einer Lösung für alle Anwendungen auf einem (Mac) OS X-System, das heißt alle Anwendungspakete registriert mit LaunchServices installiert aufzuzählen.Aufzählen alle installierten Anwendungen auf OS X

einfacher Ansatz, die nicht funktionierten

(Bitte beachten Sie: lsregister unter /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister finden).

Zeit die Ausgabe von lsregister -dump | grep -E '^.*[ \\t]*path:[ \\t]+(\/.*)$' | grep -Eo '\/.*', ich bin mit der ein paar Probleme:

  • .app Bündel mit Zeilenumbrüchen (\n, die auf UNIX gültig ist) nicht korrekt gehandhabt werden (würde dieses Problem durch Schreiben fixierbar ein richtiger Parser)
  • lsregister behandelt nicht korrekt seltsamen Dateinamen (zB enthält die RTL mark). lsregister scheint nur Dateien mit der RTL-Marke in ihrem Namen zu ignorieren. Wenn Sie möchten, können Sie eine Datei mit RTL in ihrem Namen erstellen, indem Sie den folgenden Befehl ausführen.

    python -c 'import shutil; shutil.copytree(u"/Applications/TextEdit.app", u"/Applications/ThisIsAWeird\u202EApp.app")' 
    

    Nachdem Sie das getan, lsregister -dump | grep ThisIsAWeird wird nicht es offenbaren. Wenn Sie jedoch mit der rechten Maustaste auf eine Textdatei klicken und zu "Öffnen mit" wechseln, werden LaunchServices und Finder diese Datei weiterhin unterstützen. see yourself

einfach alle Dateien in /Applications Aufzählen und andere Verzeichnisse nicht funktionieren, weil Launchservice bewusst Anwendungspakete in beliebigen Ordnern und ich brauche auch diese Anwendungen.

Andere approch, die ich nicht

Anscheinend arbeiten habe, dann ist es eine private API-Funktion _LSFindApplications aufgerufen, die genau das tut, was ich tun muß, aber ich kann es nicht zur Arbeit kommen und fanden keine inoffizielle Dokumentation im Internet. (Nachweis vorhanden: nm /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/LaunchServices | grep __LSFindApplications$)

UPDATE: system_profiler Methode scheint auch nicht

Bis jetzt arbeite ich, obwohl die system_profiler Methode wie @Anoop vorgeschlagen heute funktioniert, aber ich fand heraus, dass lsregister noch nimmt mehr Binärdateien. Einige oder fehlen auf allen Maschinen, einige scheinen nur in system_profiler fehlen, wenn Sie ein externes Volume mit einer anderen Installation von OS X montiert haben. Hier ist eine Liste, was in der Ausgabe von system_profiler fehlt (aber in lsregister vorhanden ist) auf einem meiner Maschinen:

/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 
+1

Ich weiß, das ist möglich, weil RCDefaultApp es tut, aber ich weiß auch nicht wie. – zneak

Antwort

4

Erstens ist Ihre Anfrage nicht ganz richtig:

Ich bin Suche nach einer Lösung für alle Anwendungen auf einem (Mac) OS X-System, das heißt alle Anwendungspakete registriert mit Launchservices installiert aufzuzählen.

Das sind nicht die gleichen Dinge. Bei den mit LaunchServices registrierten Anwendungspaketen handelt es sich um die Ausgabe . Das ist nicht dasselbe wie "alle Anwendungen installiert". Es gibt keine genaue Abfrage für "alle Anwendungen installiert." OS X hat nicht einmal ein solches Konzept.

Die Ausgabe von system_profiler entspricht dem, was Spotlight weiß. Dies ist nicht die vollständige Liste der installierten Anwendungen und möglicherweise nicht in mehreren Fällen korrekt. Spotlight wurde möglicherweise deaktiviert, oder der erste Scan wurde möglicherweise nicht abgeschlossen. (Es gibt keine unterstützte Möglichkeit, Spotlight anzufordern, wenn es seinen ersten Scan abgeschlossen hat; Radar 15177626.)

Es gibt auch pkgutil --pkgs, die Ihnen zusätzliche "installierte Dinge" zur Verfügung stellen wird. Es ist auch nicht vollständig und kann Dinge auflisten, die nicht installiert sind.

Sie können auch mdfind verwenden, um die gesamte Festplatte zu gehen und zu sehen, was sich selbst eine Anwendung nennt. Das ist ziemlich effektiv, aber langsam.

Sie können auch locate .app | grep '\.app$' verwenden, was ziemlich effektiv ist, wenn die locate-Datenbank auf dem neuesten Stand ist und Sie nur App-Bundles möchten.

Ich fragte Apple darüber auf der WWDC. Es gibt keine einfache, unterstützte Antwort. Öffne ein Radar. Sie können 15177489.

1

Was als here geschieht mit Cocoa-Anwendung/Code.

Sie können möglicherweise auch system_profiler -xml SPApplicationsDataType verwenden und dann die resultierenden XML-Daten analysieren, um nur die Anwendungen zu erhalten, an denen Sie interessiert sind.

+0

heute herausgefunden, dass 'lsregister' immer noch mehr als' system_profiler' :-(. –

1

in Terminal zu übertölpeln fragen:

system_profiler SPApplicationsDataType > list_of_all_apps.txt

... schreibt Ausgabe der system_profiler Abfrage dieser Textdatei.