我很好奇Timing如何知道您在特定文件中花费的时间。我知道它需要Accessibility权限,但在那之后,它如何能够检测屏幕上当前的内容,以及访问给定文件的路径。我觉得很有趣,例如,它知道我在使用Xcode,但是它如何知道我正在使用Xcode中的特定文件?
答案 0 :(得分:7)
我没有在Timing上工作,所以我只能对他们的应用程序的实现进行有根据的猜测。
Timing声称要跟踪三个主要数据点:您使用的应用,您访问的网站以及您编辑的文档。
对于应用程序,Timing可能会监听NSWorkspaceDidLaunchApplicationNotification
通知,其中包含有关刚刚启动的应用程序的信息。要在启动Timing时检查当前打开的应用程序,它可能会检查系统事件中的非后台进程,可能是这样的:
osascript -e 'tell application "System Events" to get name of (processes where background only is false)'
(来源Get list of running Apps on Mac OS X in Bash?)
对于历史记录,Timing可能会在Safari中使用HTML5历史记录API(我不知道Timing声称支持此功能的浏览器),或采用Charles Proxy等方法监控任何传入和传出的数据包和请求。实施可能会有所不同,具体取决于Timing是否需要管理员权限。
对于文档,Timing可能会使用lsof
命令作为Droppy在其注释中建议,或者它可能使用Apple接口之一。 Pre-El Capitan,Apple在路径~/Library/Preferences/com.apple.recentitems.plist
的plist文件中列出了最近的文档。在比El Capitan更新的macOS版本中,您可以使用mdfind
命令并指定kMDItemContentModificationDate
值来查找在两个日期之间修改的文件:
mdfind -onlyin $HOME '((kMDItemContentModificationDate > $time.now(-60m)) && (kMDItemContentModificationDate < $time.now()))' | grep -v /Library/
(来源Alfred)