【问题标题】:How Mac OS X Timing app can track filesMac OS X Timing 应用程序如何跟踪文件
【发布时间】:2016-10-22 13:58:34
【问题描述】:

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

【问题讨论】:

  • 可能使用与lsof相同的API。

标签: objective-c swift macos applescript


【解决方案1】:

我不从事 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 History API(我不知道 Timing 声称支持哪些浏览器具有此功能),或者采用类似 Charles Proxy 的方法并监控任何传入和传出的数据包和请求。实现可能会有所不同,具体取决于 Timing 是否需要管理员权限。

对于文档,Timing 可能会使用 Droppy 在他们的评论中建议的 lsof 命令,或者它可能使用 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

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2015-09-11
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多