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
risposta
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)
Probabilmente utilizzando le stesse API come 'lsof' . – Droppy