Mac Catalyst: IOHID InputReportCallback not firing, USBInterfaceOpen returns kIOReturnNotPermitted (0xe00002e2) for custom HID device

Hi everyone,

I am developing a .NET MAUI Mac Catalyst app (sandboxed) that communicates with a custom vendor-specific HID USB device. Within the Catalyst app, I am using a native iOS library (built with Objective-C and IOKit) and calling into it via P/Invoke from C#.

The HID communication layer relies on IOHIDManager and IOUSBInterface APIs.

The device is correctly detected and opened using IOHIDManager APIs. However, IOHIDDeviceRegisterInputReportCallback never triggers — I don’t receive any input reports.

To investigate, I also tried using low-level IOKit USB APIs via P/Invoke from my Catalyst app, calling into a native iOS library. When attempting to open the USB interface using IOUSBInterfaceOpen() or IOUSBInterfaceOpenSeize(), both calls fail with: kIOReturnNotPermitted (0xe00002e2). — indicating an access denied error, even though the device enumerates and opens successfully.

Interestingly, when I call IOHIDDeviceSetReport(), it returns status = 0, meaning I can successfully send feature reports to the device. Only input reports (via the InputReportCallback) fail to arrive. I’ve confirmed this is not a device issue — the same hardware and protocol work perfectly under Windows using the HIDSharp library, where both input and output reports function correctly.

What I’ve verified

•Disabling sandboxing doesn’t change the behavior.

•The device uses a vendor-specific usage page (not a standard HID like keyboard/mouse).

•Enumeration, open, and SetReport all succeed — only reading input reports fails.

•Tried polling queues, in queues Input_Misc element failed to add to the queues.

•Tried getting report in a loop but no use.

Please suggest me if there is a way I handle input report. currently I am blocked .Thanks

The device is correctly detected and opened using IOHIDManager APIs.

The modern API for this is actually "CoreHID", which I what I'd recommend building on.

However, IOHIDDeviceRegisterInputReportCallback never triggers — I don’t receive any input reports.

I'd need to go look at the API again, but I think most of the other APIs are actually just retrieving data from the IORegistry, which doesn't really require any "access" to the device itself. In terms of what it's failing, I suspect it's because you haven't authorized Input Monitoring, as described here.

•The device uses a vendor-specific usage page (not a standard HID like keyboard/mouse).

What's it's device class? We require "Input Monitoring" for anything that the system itself "directly" understands (keyboard, mice, etc) but I think you could avoid that requirement with the right device type.

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

Mac Catalyst: IOHID InputReportCallback not firing, USBInterfaceOpen returns kIOReturnNotPermitted (0xe00002e2) for custom HID device
 
 
Q