当这个question回答时,我使用AXIsProcessTrustedWithOptions而没有选项来测试我的应用程序是否已在辅助功能面板中启用。如果没有,请提示窗口让用户启用它。此测试调用也有绑定按钮,因此用户无需关闭UI并重新打开它。
但有时,即使在用户启用应用程序后,AXIsProcessTrustedWithOptions仍会返回false。当我检查sqlite数据库时,它将我的应用程序显示为“kTCCServiceAccessibility | com.abc.def | 0 | 1 | 1 ||”。前1位表示显然已被允许。但api调用仍然返回false。此时,如果我关闭UI,则会在辅助功能面板中取消选中该应用程序,这会导致循环,因此用户永远无法通过此步骤。
另一件事是这个应用程序实际上是以前的应用程序的版本2。但是用户确实用v2替换了捆绑包。不确定这是否相关。
知道为什么会这样吗?
NSDictionary *options = @{(id)kAXTrustedCheckOptionPrompt: @NO};
BOOL accessibilityEnabled = AXIsProcessTrustedWithOptions((CFDictionaryRef)options);
if (!accessibilityEnabled) {
NSString *urlString = @"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility";
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]];
}
答案 0 :(得分:0)
我在尝试使用AXIsProcessTrusted
和AXIsProcessTrustedWithOptions
的Xcode在macOS 10.14.5上开发应用程序时遇到了这种情况。
在浪费大量时间尝试各种事情(包括AXIsProcessTrustedWithOptions
的不同选项,注销/登录,重新启动,祈祷和哭泣之后),我最终关闭了计算机并沮丧地重新打开电源。然后它起作用了。希望没有其他人有同样的经历。