疑Apple GCController.shouldMonitorBackgroundEvents功能失效,求排查
macOS 后台无法监听游戏控制器输入问题
我设置了GCController.shouldMonitorBackgroundEvents = true,但应用在后台时仍然无法获取游戏控制器的输入。苹果官方文档对该属性的说明是:
一个布尔值,指示应用在非前台状态下是否需要响应控制器事件。
当前现象:应用处于前台时能正常识别控制器输入,切换到后台后就无法识别,但控制器并未断开连接。我确认大约两个月前这个功能是正常工作的,而且近期一款同类功能的应用也出现了同样的失效情况,这让我更怀疑是该功能本身出了问题。
最小复现代码
import SwiftUI import GameController @main struct TestingControllerConnectionApp: App { @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { ContentView() } } } class AppDelegate: NSObject, NSApplicationDelegate { var statusItem: NSStatusItem? var controller: GCController? func applicationDidFinishLaunching(_ notification: Notification) { setupMenuBar() GCController.shouldMonitorBackgroundEvents = true NotificationCenter.default.addObserver( self, selector: #selector(controllerDidConnect), name: .GCControllerDidConnect, object: nil ) NotificationCenter.default.addObserver( self, selector: #selector(controllerDidDisconnect), name: .GCControllerDidDisconnect, object: nil ) } @objc private func setupMenuBar() { let menu = NSMenu() menu.addItem(NSMenuItem(title: "Quit", action: #selector(quitApp), keyEquivalent: "q")) statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) statusItem?.button?.image = NSImage(resource: .controllerBar) statusItem?.menu = menu } @objc private func quitApp() { NSApp.terminate(nil) } @objc private func controllerDidConnect(_ notification: Notification) { if let controller = notification.object as? GCController { print("Controller connected") self.controller = controller if let gamepad = controller.extendedGamepad { gamepad.buttonA.pressedChangedHandler = { _, _, pressed in print("Button A pressed: \(pressed)") } } } } @objc private func controllerDidDisconnect(_ notification: Notification) { print("Controller disconnected") } }
测试环境
- macOS 15.4.1
- PS5 控制器
- 代码基于全新Xcode项目创建,已添加
NSHumanInterfaceDeviceUsageDescription权限,测试时仅打开Xcode和该应用
已尝试的解决方案
- 添加权限:
com.apple.security.device.bluetooth、com.apple.security.device.usb和com.apple.security.device.hid - 在代码不同位置设置
GCController.shouldMonitorBackgroundEvents = true - 在应用Capabilities标签中添加「Game Controllers」功能
请问是我的代码或对该属性的理解有误,还是苹果的这个功能确实出现了损坏?
内容的提问来源于stack exchange,提问作者Torke
相关产品推荐
相关产品推荐

