2016-06-21 11 views
11

Sono curioso di sapere come Timing è in grado di conoscere la quantità di tempo che trascorri in un determinato file. Capisco che sia necessario il permesso di accessibilità, ma dopo, come è in grado di rilevare ciò che è attualmente sullo schermo, oltre ad accedere al percorso di un determinato file. Trovo intrigante, ad esempio, che sappia che sono su Xcode, ma come fa a sapere che sto lavorando su un file specifico, all'interno di Xcode?Come l'applicazione di sincronizzazione di Mac OS X può tracciare i file

+0

Probabilmente utilizzando le stesse API come 'lsof' . – Droppy

risposta

7

Non lavoro su Temporizzazione, quindi posso solo fare un'ipotesi su come è stata implementata la loro app.

Il tempismo richiede di tenere traccia di tre punti dati principali: le app utilizzate, i siti Web visitati e i documenti modificati.

Per le applicazioni, il tempo probabilmente ascolta la notifica NSWorkspaceDidLaunchApplicationNotification, che contiene informazioni sull'applicazione appena avviata. Per controllare le applicazioni attualmente aperte quando Timing è lanciato, probabilmente controlla i processi non-fondo da eventi di sistema, forse in questo modo:

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

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

Per la storia, Timing potrebbe utilizzare l'HTML5 API di cronologia con Safari (non so quali browser supporti che Timing supporterà con questa funzione), o prendere un approccio come Charles Proxy e monitorare tutti i pacchetti e le richieste in entrata e in uscita. L'implementazione può variare a seconda se il Timing richiede i privilegi di amministratore.

Per i documenti, il cronometro potrebbe utilizzare il comando lsof come suggerito da Droppy nei propri commenti, oppure potrebbe utilizzare una delle interfacce Apple. Pre-El Capitan, Apple ha elencato i documenti recenti in un file plist sul percorso ~/Library/Preferences/com.apple.recentitems.plist. Nelle versioni più recenti di MacOS El Capitan, è possibile utilizzare il comando mdfind e specificare il valore kMDItemContentModificationDate per trovare i file modificati tra due date:

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

(Fonte Alfred)