Releases: Peterksharma/switch2mac
Release list
v0.2.0 — Controllers work everywhere
Controllers are now real game controllers
Apple granted this app the HID virtual-device entitlement, and v0.2.0 ships with it. Every connected Switch 2 controller now appears to macOS as an ordinary HID gamepad, so games, emulators, and anything else that reads a controller see yours directly — no bridge, no per-game setup.
Verified end to end on a Pro Controller 2: the moment it connects, macOS carries it as a virtual HID device named Pro Controller 2 (Finally).
Properly signed, and notarized by Apple
This build is signed with an Apple Developer ID certificate and notarized by Apple, so macOS opens it normally — no "unidentified developer" warning, no right-click-to-open dance, no Gatekeeper detour. That signature is also what makes the rest of this release possible: the driver entitlement is granted to the signed app through an embedded provisioning profile, so an unsigned build simply could not create controllers.
It matters for updates too. The in-app updater verifies that every download is signed by this same Developer ID team before it will install it, so a compromised update feed can't push you someone else's app.
What changed for you
- Before: games could only see controllers through the patched SDL build in
sdl/. - Now: launch the app, connect a controller, start the game. The SDL bridge is still there and still worth using for the two things a generic HID gamepad can't carry — rumble and motion — but normal play no longer needs it.
Install
Download FinallyTheControllerWorks-0.2.0.dmg, open it, and drag Finally the Controller Works into Applications. Launch it from there and keep it there: macOS runs apps started from Downloads out of a temporary read-only copy, where they can't install their own updates.
Requires macOS 15 (Sequoia) or later, on Apple Silicon.
Also in this release
- Updates can no longer make the app disappear. The updater swaps the running bundle in place, which can't work from a read-only location — and the app had already quit to let the swap happen. Clicking "Install Update" from a Downloads copy made the app vanish with nothing installed. It now detects that case and tells you to move the app to Applications instead.
- Virtual gamepad creation retries. macOS validates an app's embedded provisioning profile lazily, so the very first launch after install can be refused even with the entitlement fully in place. The app used to treat that as final for the whole session and fall back to the SDL path; now it retries.
- Cleaner archive. The distribution zip no longer carries AppleDouble (
._) shadow files, which could land inside the bundle when unzipped from the command line and make an otherwise valid app fail signature verification.
Files
| File | What it's for |
|---|---|
FinallyTheControllerWorks-0.2.0.dmg |
The download. Drag to Applications. |
FinallyTheControllerWorks.zip |
What the in-app updater fetches. |
appcast.json |
The update feed. |
v0.1.0 — first public beta
First public beta of Finally the Controller Works — Nintendo Switch 2 controllers (Pro Controller 2, Joy-Con 2, NSO GameCube pad) on macOS over Bluetooth, as a native menu-bar app.
Notarized Developer ID build — download, unzip, drag to Applications, launch.
Highlights
- Up to 4 controllers over Bluetooth with auto-reconnect (and the macOS keep-alive workaround that makes this possible at all)
- Dashboard: input test, battery + charge state, hidden sensors, motion instruments, tilt-compensated compass
- Stick calibration, deadzones, axis inversion, button remapping, rumble intensity, player-LED patterns
- Find My Controller (LED chase + rumble + proximity)
- Joy-Con 2 mouse mode
- Games & emulators: the
sdl/folder in the repo carries a patched SDL 3.4.14 that turns the app's UDP streams into standard SDL gamepads — Gopher64 works today, rumble included (seesdl/README.md) - Signed auto-updates (this release arms the feed)
Known limitation
System-wide virtual game controllers await Apple's approval of the HID driver entitlement — until then, games see controllers through the SDL bridge above. The protocol research behind the app is published in research/.
🤖 Generated with Claude Code