Skip to content

v0.2.0 — Controllers work everywhere

Latest

Choose a tag to compare

@Peterksharma Peterksharma released this 19 Sep 07:10

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.