Our application, https://apps.apple.com/us/app/gamecontroller-mapper/id6737088417
which maps game controller inputs to keyboard/mouse events system-wide, has stopped functioning properly after the macOS 15.4 update. Specifically, the app can no longer capture game controller inputs when running in the background, severely impacting its core functionality.
Environment
- macOS version: 15.4
- Previous working versions: All versions prior to 15.4
- App type: Background utility with accessibility permissions
- Hardware: All game controller brands compatible with macOS
Detailed Description
Before macOS 15.4
Our application correctly captured game controller inputs from any brand connected to Mac and successfully translated them to keyboard/mouse events system-wide. Users could control any application (e.g., scrolling through documents in Preview using controller buttons) while our app ran in the background with the accessibility permissions granted.
After macOS 15.4
The application only works when it has active focus (is in the foreground). When any other application gains focus, our app completely stops receiving or detecting any input events from the game controller while running in the background. For instance, pressing the 'down' button on the controller while another app is active results in no event being registered within our application.
We've tried updating the app to work in accessory mode (in the menubar), but the issue persists.
Steps to Reproduce
- Install our application on macOS 15.3 or earlier
- Grant accessibility permissions when prompted
- Connect a compatible game controller (e.g., Xbox or other controller)
- Open another application (e.g., Preview with a PDF document)
- Press buttons on the controller to navigate the document without touching the keyboard
- Expected result on 15.3: Controller inputs are translated to keyboard events, even when our app is in the background
- Upgrade to macOS 15.4
- Repeat steps 2-5
- Actual result on 15.4: Controller inputs are only translated to keyboard events when our application has focus
Technical Implementation
Our app uses:
CGEvent.tapCreate()
to create a global event tapCGEvent
for simulating keyboard and mouse eventsGCController.extendedGamepad?.valueChangedHandler
for detecting controller inputs- Proper
NSAccessibilityUsageDescription
and appropriate entitlements GCController.shouldMonitorBackgroundEvents = true
to ensure controller events continue when the app is inactive
Possible Relation to Recent Changes
We noticed in the macOS 15.4 Release Notes:
Game Controller - Resolved Issues: Fixed: Game controllers might stop responding when accessibility features, such as Voice Over, are enabled. (141497799)
We suspect this fix might have introduced a regression or intentional limitation affecting applications like ours that rely on background event simulation with game controller input.
Impact
This change severely impacts:
- Applications designed to use game controllers as assistive input devices for users who may have difficulty using traditional keyboard and mouse inputs
- Applications for media control, presentation navigation, and other similar use cases
- Users who rely on our application for accessibility purposes
Questions
- Is this an intentional security change or an unintended side effect of the controller fix mentioned in the release notes?
- Are there any new APIs or alternative approaches we should implement to restore functionality?
- If this is a system bug, when can we expect a fix?
We would greatly appreciate any guidance on how to restore our application's functionality. Thank you for your assistance.