2016-06-21 6 views
11

Ich bin gespannt, wie Timing in der Lage ist zu wissen, wie viel Zeit Sie in einer bestimmten Datei verbringen. Ich verstehe, dass es Accessibility-Berechtigung benötigt, aber danach ist es in der Lage zu erkennen, was derzeit auf dem Bildschirm ist, und den Pfad zu einer bestimmten Datei zugreifen. Ich finde zum Beispiel faszinierend, dass ich weiß, dass ich auf Xcode bin, aber woher weiß ich, dass ich an einer bestimmten Datei innerhalb von Xcode arbeite?Wie Mac OS X Timing-App Dateien verfolgen kann

+0

Wahrscheinlich die gleichen APIs wie 'lsof' mit . – Droppy

Antwort

7

Ich arbeite nicht am Timing, so kann ich nur eine begründete Vermutung darüber, wie ihre App implementiert wurde.

Timing beansprucht drei Hauptdatenpunkte im Auge zu behalten: die Apps, die Sie verwenden, die Websites, die Sie besuchen, und die Dokumente, die Sie bearbeiten.

Für Anwendungen hört Timing wahrscheinlich die NSWorkspaceDidLaunchApplicationNotification Benachrichtigung, die Informationen zu der gerade gestarteten Anwendung enthält. Um die aktuell geöffneten Anwendungen zu überprüfen, wenn Zeitpunkt gestartet wird, überprüft es wahrscheinlich die Nicht-Hintergrundprozesse von Ereignissystem, möglicherweise wie folgt aus:

osascript -e 'tell application "System Events" to get name of (processes where background only is false)' 

(Quelle Get list of running Apps on Mac OS X in Bash?)

für Geschichte, Timing könnte die HTML5 verwenden Verlaufs-API mit Safari (Ich weiß nicht, welche Browser Timing mit dieser Funktion unterstützen möchte), oder einen Ansatz wie Charles Proxy und die Überwachung ein- und ausgehender Pakete und Anforderungen. Die Implementierung kann abhängig davon variieren, ob für das Timing Administratorrechte erforderlich sind.

Für Dokumente könnte Timing den Befehl lsof verwenden, wie Droppy in ihrem Kommentar vorgeschlagen hat, oder es könnte eine der Apple-Schnittstellen verwenden. Pre-El Capitan, Apple listete neueste Dokumente in einer PLIST-Datei unter dem Pfad ~/Library/Preferences/com.apple.recentitems.plist auf. In macOS Versionen neuer als El Capitan, können Sie den mdfind Befehl verwenden und geben Sie den Wert kMDItemContentModificationDate Dateien zwischen zwei Daten modifiziert zu finden:

mdfind -onlyin $HOME '((kMDItemContentModificationDate > $time.now(-60m)) && (kMDItemContentModificationDate < $time.now()))' | grep -v /Library/ 

(Quelle Alfred)