这并不能回答你的问题,但很高兴了解 10.9 中出现的新 API 调用,它可以让你显示授权屏幕或绕过它:
NSDictionary *options = @{(id)kAXTrustedCheckOptionPrompt: @YES};
BOOL accessibilityEnabled = AXIsProcessTrustedWithOptions((CFDictionaryRef)options);
Passing YES
将强制出现授权屏幕,通过NO
会默默地跳过它。返回值与返回值相同AXAPIEnabled()
,它在 10.9 中已被弃用。要确保该功能在您的系统上可用,只需将其与NULL
:
if (AXIsProcessTrustedWithOptions != NULL) {
// 10.9 and later
} else {
// 10.8 and older
}
你需要添加ApplicationServices.framework
到您的项目,然后导入到您的 .m 或 .h 文件:
#import <ApplicationServices/ApplicationServices.h>
遗憾的是,授权屏幕并没有让用户直接授权应用程序,它只是打开系统偏好设置的右侧部分。顺便说一句,您可以直接执行此操作,而无需经过无用的系统对话:
tell application "System Preferences"
set securityPane to pane id "com.apple.preference.security"
tell securityPane to reveal anchor "Privacy_Accessibility"
activate
end tell
或使用 Objective C:
NSString *urlString = @"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility";
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]];
这可以与第一个代码片段配对来测试是否accessibilityEnabled
通过传递@NO
to kAXTrustedCheckOptionPrompt
同时防止出现系统弹出窗口,而是直接打开“辅助功能首选项”窗格:
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]];
}