[UE 5.8 / tvOS] Gamepad button RELEASE events never delivered when 2+ controllers are connected (Apple TV) — one controller works fine

Summary

On tvOS, gamepad button RELEASE events are never delivered once two or more GCControllers are connected. Presses arrive normally, but the key latches down, so any Enhanced Input action bound to Started/Pressed fires exactly once and never again.

With only one controller connected it works correctly. This is unavoidable on Apple TV because the Siri Remote is always a connected gamepad, so remote + any real gamepad = two controllers.

What Type of Bug are you experiencing?

Platform Other

Steps to Reproduce

  1. UE 5.8 project with Enhanced Input. Add IA_Jump (digital bool) mapped to
    Gamepad_FaceButton_Bottom, with Started → Jump.
  2. Package for tvOS (Development) and deploy to an Apple TV.
  3. Pair one gamepad (PS5 or Xbox). The Siri Remote is also connected, so the
    device now has two controllers.
  4. In game, press the jump button, release it, then press it again.

Expected Result

Jump triggers on every press.

Observed Result

Jump triggers on the first press only, then never again.

With LogEnhancedInput=Verbose, opening a menu 16 seconds after the last physical
press logs:

Key Gamepad_FaceButton_Bottom mapped to Input Action IA_Jump
will be ignored until released

FlushPressedKeys only flags keys it finds currently held, so Enhanced Input still
had the key DOWN 16 seconds after release. The release event never arrived.
UPlayerInput keys state per FKey rather than per device, so one missed release
latches that key for every connected controller.

Affects Versions

5.8

Platform(s)

iOS

Additional Notes

Controller count is the trigger (measured on device):
1 controller → works correctly
2 controllers → broken
3 controllers → broken
The second controller does not need to be touched, only connected.

The same project on iPad with a single controller works perfectly.

Already ruled out by testing on device:

  • Enhanced Input flush / bShouldBeIgnored (logged once, paired correctly with its
    clear)
  • bGameSupportsMultipleActiveControllers=True (made it worse: a second gamepad
    stops driving the pawn entirely, and the Siri Remote as PlayerOne still jumped
    only once)
  • Info.plist GCSupportedGameControllers = [ExtendedGamepad] only, MicroGamepad
    omitted (verified present in the shipped plist; the Siri Remote still
    enumerates)
  • Enhanced Input trigger configuration (with no release event, no trigger type can
    distinguish “still held” from “pressed again”)

Possibly relevant, not verified as the cause:
FAppleControllerInterface::SendControllerEvents() swaps the shared members
CurrentButtonIndex/PrevButtonIndex INSIDE the per-connected-controller loop, while
ControllerButtons is only [2][MAX_NUM_CONTROLLERS] and CaptureControllerState
writes solely to [CurrentButtonIndex][ControllerIndex].

Environment: UE 5.8.0, Blueprint-only project, macOS host, Xcode 26.6,
Apple TV 4K 1st gen (AppleTV6,2), tvOS 26.6. Full device logs available on
request, and I can rebuild and test a hypothesis on hardware in a few minutes.

Quick follow up. If I unpair my Apple TV remote and just use the PS5 controller the PS5 controller works perfectly, d-pad and left stick work with menu navigation and can control my character correctly - jumping and shooting. It’s only if I have the Apple TV remote connected doe the PS5 controller NOT work correctly. Initial launch of app, PS5 controller does not respond at all. Use the Apple TV remote to navigate menus a little and then I can use the PS5 controller - but can’t use d-pad for menu navigation as it goes to fast between options, so must use the left stick. Start the game and can only jump once and shoot once.