即使在辅助功能中选中了应用程序,AXIsProcessTrustedWithOptions也不会返回true

时间:2017-04-11 14:20:27

标签: macos qt accessibility

当这个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]];
}

1 个答案:

答案 0 :(得分:0)

我在尝试使用AXIsProcessTrustedAXIsProcessTrustedWithOptions的Xcode在macOS 10.14.5上开发应用程序时遇到了这种情况。

在浪费大量时间尝试各种事情(包括AXIsProcessTrustedWithOptions的不同选项,注销/登录,重新启动,祈祷和哭泣之后),我最终关闭了计算机并沮丧地重新打开电源。然后它起作用了。希望没有其他人有同样的经历。