Objective c Mac OS X计时应用程序如何跟踪文件

Objective c Mac OS X计时应用程序如何跟踪文件,objective-c,swift,macos,applescript,Objective C,Swift,Macos,Applescript,我很好奇你是如何知道你花在一个特定文件上的时间的。我知道它需要访问权限,但在那之后,它如何能够检测屏幕上当前的内容,以及访问给定文件的路径。例如,我发现有趣的是,它知道我在Xcode上,但它怎么知道我在Xcode内处理特定的文件呢?我不研究时间,所以我只能对他们的应用程序是如何实现的进行有根据的猜测 Timing声称可以跟踪三个主要数据点:你使用的应用程序、你访问的网站和你编辑的文档 对于应用程序,计时可能会侦听nsworkspacedlaunchapplicationnotification通

我很好奇你是如何知道你花在一个特定文件上的时间的。我知道它需要访问权限,但在那之后,它如何能够检测屏幕上当前的内容,以及访问给定文件的路径。例如,我发现有趣的是,它知道我在Xcode上,但它怎么知道我在Xcode内处理特定的文件呢?

我不研究时间,所以我只能对他们的应用程序是如何实现的进行有根据的猜测

Timing声称可以跟踪三个主要数据点:你使用的应用程序、你访问的网站和你编辑的文档

对于应用程序,计时可能会侦听
nsworkspacedlaunchapplicationnotification
通知,其中包含有关刚刚启动的应用程序的信息。要在计时启动时检查当前打开的应用程序,它可能会从系统事件中检查非后台进程,可能如下所示:

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

对于历史,计时可能会将HTML5历史API与Safari一起使用(我不知道计时声称支持什么浏览器),或者采取类似Charles Proxy的方法来监视任何传入和传出的数据包和请求。根据计时是否需要管理员权限,实现可能会有所不同

对于文档,计时可以使用Droppy在他们的评论中建议的
lsof
命令,也可以使用Apple的一个界面。在El Capitan之前,苹果在路径
~/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/
mdfind-onlyin$HOME'((kMDItemContentModificationDate>$time.now(-60m))&&(kMDItemContentModificationDate<$time.now())”| grep-v/Library/

(来源)

可能使用与
lsof
相同的API。