如何获取与AXUIElement对应的Objective-C类名?

MrM*_*age 8 macos accessibility objective-c accessibility-api appkit

Apple的Accessibility Inspector工具显示与当前检查的UI元素对应的Objective-C类.请参NSButtonCell见此屏幕截图的最底部:

Accessibility Inspector截图

但是,如何在我自己的代码中提取此信息?Apple七年之久的UIElementInspector示例代码中的辅助功能方法不会显示元素的类名.

对Accessibility Inspector进行反向工程,暗示可以通过AXClassName属性获取Objective-C类名,但该属性对我来说总是零.

bda*_*ash 5

AppKit将访问该AXClassName属性以及其他几个属性的权限限制为具有com.apple.private.accessibility.inspection权利的应用程序。可访问性检查器用于访问可访问性信息的XPC服务具有此权利。由于这是私人权利,因此我相信只能将其添加到由Apple证书签名的应用程序中。

您可以像这样从Accessibility Inspector的XPC服务中剥夺权利来确认权利是关键的(首先备份Accessibility Inspector!):

codesign -f -s - /Applications/Xcode.app/Contents/Applications/Accessibility\ Inspector.app/Contents/Frameworks/AccessibilityAuditDeviceManager.framework/XPCServices/axAuditService.xpc
Run Code Online (Sandbox Code Playgroud)

如果您随后打开Accessibility Inspector,您将看到大多数功能都可以正常工作,除了在私有权利上设置的类名之类的东西之外。

具有标题XPC服务的可访问性检查器

具有标题XPC服务的辅助功能检查器