macos - 如何在应用程序沙箱中使用 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>
我的理解是,如果我使用DispatchSource
该makeFileSystemObjectSource
函数来监视文件夹,它应该处理与此文件夹中文件的任何更改相关的事件。看来这并没有发生。相反,我可以直接监视文件的更改,但是如果删除了该文件,则该监视器将不起作用。我发现如果文件不存在并且DispatchSource
正在监视文件夹,它在创建文件时确实处理了一个事件。我想知道的是是否有办法配置权利以允许用于DispatchSource
监视文件夹中的文件更改。或者是否有必要在创建文件之前监视文件夹,然后更改DispatchSource
以监视文件?
如果我不能只使用目录监视器,我可能需要做的是启动并取消 2 个监视器。我已在 GitHub 上将代码作为 Gist 共享。它在下面链接。
解决方案
推荐阅读
- google-apps-script - Google Apps 脚本弹出对话框,库问题
- arrays - Swift:序列化一个 jsonObject 字典数组
- ios - 为什么每次点击搜索栏时导航栏都会消失?
- java - 坚持试图让这个程序工作。(Java新手,习惯了python。)
- mysql - 如何在mysql中将查找表值插入json/json数组/json格式并通过从json中查询值来检索数据键:值对
- redux-saga - 您如何从另一个动作中的动作获得结果?
- java - Java 异常变量
- spring-boot - Oauth2 Okta open Id 实现 spring boot 1.5
- javascript - 如何通过使其更灵活来重用功能
- javascript - 使用 Excel 电子表格作为数据库的 Electron-Python 应用程序:使用 npm 包 - database-js-xlsx 进行 CRUD 操作