Hi, I’m looking for clarification from folks familiar with CoreHID rather than App Review, as the guys there have not responded to my post (https://developer.apple.com/forums/thread/820676)
We have a sandboxed macOS app that creates a virtual HID device (HIDVirtualDevice) as described in Creating virtual devices https://developer.apple.com/documentation/corehid/creatingvirtualdevices
To work at all, the app requires the entitlement:
com.apple.developer.hid.virtual.device
With this entitlement present, macOS shows the system prompt requesting Accessibility permission
App would like to control this computer using accessibility features. Grant access to this application in Security and Privacy preferences located in System Preferences.
when HIDVirtualDevice(properties:) is called. There is no mention of Accessibility in the HIDVirtualDevice documentation, but the behavior is reproducible and seems unavoidable.
My question is therefore:
Is creating a virtual HID device from userspace via HIDVirtualDevice considered inherently incompatible with Mac App Store distribution?
In other words:
Is the Accessibility prompt an expected side‑effect of this API?
And if so, does that mean using HIDVirtualDevice is only practical for direct (non–App Store) distribution unless the app is explicitly an accessibility tool?
I’m not asking about review policy details—just whether, from a technical/system point of view, HIDVirtualDevice is actually intended to be usable by App Store apps.
For context, there seem to be public, non‑accessibility uses of Apple’s virtual HID infrastructure, like
-
this recent post: https://developer.apple.com/forums/thread/820708 and corresponding Github repo
-
this project.
I don't know if these intend to use the App Store, but they might end up in the same situation.
Any insights from people who’ve worked with CoreHID would be greatly appreciated.
Thanks, Magnus
With this entitlement present, macOS shows the system prompt requesting Accessibility permission.
First, as a clarification, the prompt is tied to specific device types (keyboards/mice/touchpads), NOT just general HID device usage. Putting that in more concrete terms, it's required because your device is generating events that could be used to directly control the system, not simply because you're using the virtual HID API. Also, as a side note, you can use IOHIDCheckAccess and IOHIDRequestAccess to determine what your app’s current authorization status is.
Having said that, please file a bug on this and post the bug number back here. As background context, the "Accessibility permission" is the general purpose permission for apps that are manipulating the system-wide input stream. I think using it for virtual HID is something we might want to reconsider, as it's giving you significantly more capability than you need/want, since it's allowing you to actively monitor/manipulate the system-wide event stream when all a virtual HID app actually NEEDS to do is blindly "inject" events into the stream. I'm also concerned that it's indirectly encouraging the usage of DriverKit for the same role, something I'm pretty actively against.
Is creating a virtual HID device from userspace via HIDVirtualDevice considered inherently incompatible with Mac App Store distribution?
My understanding is that, in general, apps that require the Accessibility permission aren't eligible for the Mac App Store. However, I don't think that totally matches what HIDVirtualDevice is used for, so it's possible that exceptions to that might be made and/or the required access might change at some point.
__
Kevin Elliott
DTS Engineer, CoreOS/Hardware