首页 > 解决方案 > 如何在应用程序沙箱中使用 macOS 上的 DispatchSource?

问题描述

我在用户目录的根目录中有一个配置文件夹。例如,在这个文件夹中~/.ztool有一个status可以创建、更新或删除的文件,知道这个文件的状态很重要。现有的命令行工具使用和修改这个status文件。我创建了监视文件夹和文件的代码,但我认为 Mac 上的沙盒安全性导致 DispatchSource 错过关键事件。对于权利,我必须将以下内容添加到权利文件中。

<key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key>
<array>
<string>/.ztool</string>
<string>/.ztool/status</string>
</array>

我的理解是,如果我使用DispatchSourcemakeFileSystemObjectSource函数来监视文件夹,它应该处理与此文件夹中文件的任何更改相关的事件。看来这并没有发生。相反,我可以直接监视文件的更改,但是如果删除了该文件,则该监视器将不起作用。我发现如果文件不存在并且DispatchSource正在监视文件夹,它在创建文件时确实处理了一个事件。我想知道的是是否有办法配置权利以允许用于DispatchSource监视文件夹中的文件更改。或者是否有必要在创建文件之前监视文件夹,然后更改DispatchSource以监视文件?

如果我不能只使用目录监视器,我可能需要做的是启动并取消 2 个监视器。我已在 GitHub 上将代码作为 Gist 共享。它在下面链接。

标签: macosdispatchappstore-sandboxentitlementsfsevents

解决方案


推荐阅读