macOS: native Switch 2 controllers with automatic setup, rumble and calibrated motion - #1
Merged
Merged
Conversation
… macOS Embed the pinned controller SDK; add per-slot recommended mappings, persistent device identity, safe profile replacement and timed rumble testing. Preserve ordinary controller APIs and disabled builds. Add host, mapping and transaction regressions and a local build helper.
… discovery timers
Check duplicate assignments, game-profile ownership and unsupported emulated types before opening the candidate SDL handle. A rejected temporary handle must not stop another slot's rumble or change its sensor policy. Add an ordering regression alongside the existing mapping, rollback and lifecycle checks.
jmonster
marked this pull request as ready for review
September 18, 2026 00:52
…down Retain a shared coalescing flag in the event subscription instead of binding the window pointer. Callbacks already in flight can finish after disconnect without touching destroyed widgets; only the main-thread timer refreshes the UI. Add executable notification lifetime and reopened-window isolation tests alongside the source wiring regression.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Controller support
Embed Switch2Kit directly in Cemu on macOS. No separate controller app, UDP bridge or system driver is required.
In Options → Input settings, use Find Switch 2 Controllers, then choose a GameCube or Pro controller beside the emulated controller selector. Cemu applies the Nintendo-labelled buttons, sticks, triggers and rumble automatically. Existing Wii U GamePad, Wii U Pro Controller and Classic Controller types are supported; an empty first slot defaults to GamePad.
Build and try
Use macOS 15+, Xcode 26+/Swift 6.2+, and the dependencies in
docs/Switch2Kit.md. Runbash scripts/build-switch2kit.sh --runin this checkout. The helper builds the pinned SDK, embeds the required libraries, signs the completed app ad hoc and opens Cemu. Vulkan remains enabled.The backend is optional and off by default. Ordinary builds retain existing controller APIs and the deployment target. This uses the already-merged GameCube-rumble SDK revision used by Dolphin; no additional Switch2Kit PR is required.
Validation
Ready for code review. The final native and cross-platform build checks are still pending; wait for those checks before merging.
No test assertions have been weakened or checks disabled to obtain a pass. Nothing has been merged.
Hardware and scope
Physical Bluetooth reconnection, motor start/stop and Cemu gameplay still need a real Mac/controller test. Motion requires a measured calibration profile for the specific controller, not a test fixture. Ordinary buttons and rumble do not need a motion profile. Wiimote mappings remain manual, and a gamepad does not replace the GamePad touchscreen. Application artifacts are development builds, not notarized releases.