出于测试目的将 EKAuthorizationStatus 重置为 EKAuthorizationStatusNotDetermined

Resetting EKAuthorizationStatus to EKAuthorizationStatusNotDetermined for Testing Purposes

所以,问题是: 当使用 Event Kit 框架并请求访问 OSX 上的用户日历数据库时,仅在第一次调用 -requestAccessToEntityType:Completion: 时显示请求用户许可的面板。这使得很难在用户拒绝权限时测试应用程序的响应,甚至在用户最初授予权限时(换句话说,重新创建 first-运行 条件)。如果有一种方法可以将 EKAuthorizationStatus 重置为 EKAuthorizationStatusNotDetermined,则可以复制此用户场景,但据我所知,一旦做出初始权限决定,就无法返回到 NotDetermined 状态。

我已阅读此处发布的 iOS 解决方案:Is it possible to reset the privacy settings in iOS? 但我找不到 OSX.

的类似解决方案

问题: 有没有办法模拟请求访问用户日历数据库的应用程序的第一个 运行,以便重复显示权限对话框以进行测试?

权限标志存储在 SQLite 数据库中:

~/Library/Application Support/com.apple.TCC/TCC.db

access table 中,您应该看到 servicekTCCServiceAddressBook 列,以及 client 到任何具有权限的相应应用程序,或者在某个时候请求它。

如果你想测试再次请求权限的功能,就是删除包含应用程序名称的行——下次启动它时你应该会再次收到请求。

您可以通过以下方式验证权限:

System Preferences > Security & Privacy > Privacy 

作为额外的解决方案,我后来发现这个post:Revoke a requestAccessToEntityType: authorization on Mavericks so I can test my app

建议使用 tccutil 命令行工具清除日历数据库的权限。这种情况下的命令是

tccutil reset Calendar