Mac OS X Timing应用程序如何跟踪文件

Rui*_*res 12 macos applescript objective-c swift

我很好奇Timing如何知道您在特定文件中花费的时间.我知道它需要Accessibility权限,但在那之后,它如何能够检测屏幕上当前的内容,以及访问给定文件的路径.我觉得很有趣,例如,它知道我在Xcode上,但是它如何知道我正在处理Xcode中的特定文件?

JAL*_*JAL 7

我不参与Timing,所以我只能对他们的应用程序的实现方式进行有根据的猜测.

Timing声称要跟踪三个主要数据点:您使用的应用程序,您访问的网站以及您编辑的文档.

对于应用程序,Timing可能会监听NSWorkspaceDidLaunchApplicationNotification通知,其中包含有关刚刚启动的应用程序的信息.要在启动Timing时检查当前打开的应用程序,它可能会检查系统事件中的非后台进程,可能是这样的:

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

(来源获取Bash中Mac OS X上正在运行的应用程序的列表?)

对于历史记录,Timing可能会在Safari中使用HTML5历史记录API(我不知道Timing声称支持此功能的浏览器),或采用像Charles Proxy这样的方法来监控任何传入和传出的数据包和请求.实施可能因Timing是否需要管理员权限而异.

对于文档,Timing可能会lsof在注释中使用Droppy建议的命令,或者它可能使用Apple接口之一.苹果公司(Pre-El Capitan)在路径上的plist文件中列出了最近的文件~/Library/Preferences/com.apple.recentitems.plist.在比El Capitan更新的macOS版本中,您可以使用该mdfind命令并指定kMDItemContentModificationDate值以查找在两个日期之间修改的文件:

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

(来源阿尔弗雷德)