nControl - For AppleTV 4+ and Any iOS device from iOS 7-14 and any macOS from 10.7+
Current Version: 1.9.0-22
Release date: April 7th, 2021
Current as of: April 7th, 2021
Use Sony Dual Shock 4 & 5 / Slim, XBox One (S), Evo VR Pro / Mini controllers and Nintendo Switch Joy-Con controllers in any application that supports MFI controllers. Including emulators like Provenance.
This project is Copyright © 2018-2021 nito llc. All Rights Reserved.
Written By: Kevin Bradley & Luca Todesco
Additional code by Sam Bingner and James Emrich
Special thanks to Ethan Arbuckle for initial research on patching for iOS / tvOS 13+ support
- 1 Change Log
- 2 Install Instructions
- 3 Pairing
- 4 Controller Manuals
- 5 Using on macOS
- 6 Supported Controllers
- 7 Known Supported Games
- 8 Special Notes
- 9 Running prior to iOS 13
- 10 Connect / Immediate Disconnect issue
- 11 Planned Features
- 12 Known Bugs
- 13 Controllers attempted to Support
- 14 FAQ
- 15 Additional links
- 16 Troubleshooting
- 17 Advanced Debugging
1.0-1 2019 03 15
- Initial release for tvOS and iOS
1.1-20 2019 03 22
- Added initial support for Switch Pro controller
- Added support for an older revision of Xbox One controller
- Fixed Evo VR / ipega controller bugs
- Fixed trigger sensitivity for PS4
- Improved trigger sensitivity for Xbox One (still needs work)
- Button intensity doubled.
1.2.0-1 2019 04 03
- Added support for L3 / R3 buttons on all applicable controllers (requires *OS 12.1+)
- Fixed start / select buttons on the ipega controller
- Switch Pro controller LEDs should match the proper player index (P1/P2/P3/P4)
1.2.0-11 2019 04 04
- GameSir G3s and 8bitdo Zero FC30 support
- PS4 Slim bug fixes
1.2.2-19 2019 05 08
- Logitech F310 Support (Wired)
- Dual Shock 4 Wired support
- Logitech Precision Pro (Wired)
- 8Bitdo Nes 30 support
- Improved XBox One (S) dead zone support & fixed trigger senstivity
- Limited DS3 Support (Wired & macOS only), Additional ipega support
- Gravis Gamepad Pro Support (Wired)
- Switch Pro Led / Rumble additions upon pairing
- Fixed Bugs in some 8Bitdo Zero models
1.4.0-2 2020 05 06
- Fixed iOS / tvOS 13 support!
- Dark mode support in iOS
- Better integration with DS4 and Xbox One official support
- Significantly Improved pairing UI / UX experience
- New refresh button in pairing UI
- Restart Bluetooth Services SHOULD restart bluetoothd & relaunch the nControl iOS / tvOS pairing application.
1.4.0-20 2020 05 07
- Added support for Xbox Elite 2 Controller
1.8.0-1 2021 03 08
- Properly added DualSense (DualShock 5) support.
- Added support for another Xbox Controller (not sure which one unfortunately product ID 2835)
- Fixed crashes when configuring controllers on iPad
- Added options to easily share logs & bluetooth cache files
- Added stop-gap 'fix' for device pairing issues (connect & disconnect immediately) (thanks sakura!)
1.8.1-1 2021 03 10
- Properly fixed the Connect & Disconnect issue
- Fixed controller configuration crash on all devices
- Added support for 8Bitdo SF30 Pro
- Added support for MOGA XP5-X Plus (vid: 9414 pid: 35098)
- Added support for GameSir G4s
- Added support for Hori Lic Pro Controller
1.9.0-2 2021 04 07
- Added Composite Joy-Con controller support (using 2 Joy-Cons as 1)
- Added Support for using factory or user calibration data from Switch Pro Controller
- Added Support for battery level indication for Joy-Con Composite & Switch Pro Controller)
- Added Buttons in the detail view (iOS only) for some of the functions also available in the 'action' menu
- Tons of bug fixes
Buy it through the nitoTV App Store
It is available through Cydia (and presumably Sileo) on chariz repo
If you are pairing the EVO VR Controller that looks like a nunchuck it will NOT show up in the nControl pairing UI, the default system UI in settings will work for the time being until we sort this issue out.
1. Open the nControl application.
2. Put your device in pairing mode (each controller has a different method for this)
3. The device should appear in the list momentarily (if it does not the action sheet has options to restart services, its advisable to try those if needed)
4. Select the device from the list after it appears.
5. On tvOS an action sheet will appear choose "Connect Device"
6. on iOS it will take you to another screen with additional details, click the action button in the top right
7. Choose "Connect Device"
8. If you are using the EVO "VRBOX" (thats how it displays in the UI) controller make sure to hit the B and @ button simultaneously to get into the proper "mode"
Make sure to unpair your controllers from other devices first, some controllers can be incredibly tempermental and take several tries to get working, the PS4 controller can be known to be somewhat painful to get pairing sometimes.
First step to attempt in debugging connection issues: Press the Refresh button on the top left to restart bluetooth scanning. if this does not work, try the action button and "Restart Bluetooth Services" option. This will restart bluetoothd and SHOULD close and re-open the nControl pairing app. if it does not quit and re-open the app and your controller does not appear, try quitting and re-opening the application.
Using on macOS
You need to jailbreak your mac before using this daemon, instructions can be found here
macOS version is a free bonus for anyone who purchases the iOS or tvOS version. After downloading the file you can run it from any directory (i should package this into an installer that has sa LaunchDaemon, we'll see how popular the mac version becomes if it necessitates that.)
NOTE: the boot-args on steks github may not be sufficient to get nControl working, if you have trouble getting it working try these
-v cs_enforcement_disable=1 amfi_get_out_of_my_way=1 keepsyms=1 intcoproc_unrestricted=1 amfi_allow_any_signature=0x1
After that any games you have that support MFI controller should now support all the ones nControl does as well. I dont have any MFI games so I haven't thoroughly tested how well it works. But I do know, once jailbroken on Sierra that it does indeed work. Haven't tested in later OSes but no reason it shouldn't.
Once jailbroken you can run controllersupportd, if you have just downloaded it fresh from the link above, and haven't changed your downloads location folder the following should work to get it running:
Then press return once more afterwards to get your terminal window back to 'normal' it will be running in the background now (&), so if you are done with the terminal window you are free to close it at this point.
This software works through bluetooth, if you want a controller to be added to the list that is the bare minimum requirement.
- PS4 / PS4 Slim (Wireless & Wired with Camera connection kit)
- Xbox One (the newer model with Bluetooth)
- EVO VR Pro
- Nintendo Joy-Con - as of 1.9.0-22 will work as Singular OR Composite controller!
- EVO VR Controller
- Nintendo Switch Pro
- this iPega controller
- 8bitdo Zero FC30
- 8bitdo NES30
- PS3 / SixAxis (MAC ONLY, Currently unsupported on iOS/tvOS)
- Logitech F310 (Wired)
- Logitech Precision Pro (Wired)
- Gravis Gamepad Pro (Wired)
- Xbox Elite 2nd Edition
- DualSense (DualShock 5/PS5 controller)
- Xbox controller with PID 2835 (Xbox Series X Elite maybe?)
- 8Bitdo SF30 Pro
- MOGA XP5-X Plus (vid: 9414 pid: 35098)
- GameSir G4s
- Hori Lic Pro Controller (vid: 3853 pid: 246)
Joy-Con Composite notes
This is completely experimental, it has worked for me and only been tested by one other user. it has been tested on a variety of iOS and tvOS devices ranging from 11.4 - 14.4 and has mostly worked with a few exceptions. There will still be two controllers listed in any game you play, choose the (L) and it should control both after you have chosen "Create JoyCon composite controller" in one of the variety ways available to do so.
This implementation is still rough around the edges and required a massive re-vamp of how the HID virtual devices are dispatching events, hopefully this doesn't have any far reaching effects on anything else.
Known Supported Games
When pairing with the EVO VR Pro controller or practically ANY iPega (including LE versions!), make sure to pair it in 'android' mode by Pressing and hold the EVO VR and X Buttons until the light starts to blink rapidly to enter pairing mode.
Running prior to iOS 13
Prior to iOS 13 there was no support for buttons 'start' and 'select' (in apple parlance it would be 'option' and 'home' buttons.) These buttons were not added until PS4 and XBox One support was added to the OS. Therefore, 'start' and 'select' buttons send a combination of buttons (this was done specifically to tailor support to Provenance). I made an attempt to 'backport' these buttons to work properly prior to iOS 13 but was not successful. This will be revisited in the future as soon as I have some time.
Connect / Immediate Disconnect issue
Install the latest version, this is properly fixed now!
- Generic Controller Support with UI mapping interface
- Trial version
- Steam Controller support
- GameSir Controller (s) support (not sure which models yet)
- Keyboard / Mouse access
- Improved support for Moonlight etc
- XBox one controller experiences sticky joystick issues from time to time, still a WIP to try and get this sorted out
Controllers attempted to Support
The following controllers I put an exhaustive amount of time into trying to support without any good results. Therefore they are not likely to get support in the future.
- PS3 / SixAxis
1. Does it support L3 / R3 buttons?
Yes it does! as of the latest release it is supported in *OS 12.1 only, this is when Apple added support to the MFi specification, it may be possible to backport but its not on the immediate to-do list.
2. Whats with the binary trigger sensitivity?
It should work much better with the latest release, the remaining XBox One (S) trigger issues should be fixed in the latest version!
3. Does it support iopega controllers?
It supports a few model for sure, it will advertise and pair as if its an Evo VR Pro controller.
4. Does it support fortnite?
No because they have pretty strict jailbreak detection, and to my knowledge nothing exists to circumvent that.
5. Does it support pubg?
It did, but they started doing aggressive detection and banning of users doing this so I discontinued support for the project. Head over to the Pubc page to check out the legacy details if you are curious.
6. PS3 / Wiimote support?
I've poured a TON of work into trying to get both of those to work, but to no avail. Controllers for All required BTStack so the custom pairing routines required for both of these controllers wasn't as challenging as implementing everything natively without any code injection or custom blue tooth stacks running. I doubt either of these controllers will see support, I'm open to trying still, but remain skeptical about it happening. It works in macOS now, shows a shimmer of hope to work in iOS in at LEAST a wired fashion at some point)
7. Mouse & Keyboard support?
Not currently supported but a really frequent request, so it's definitely on the list of possibilities in future updates.
8. Does nControl require a jailbreak, if yes, does it need to be a specific jailbreak to work?
Yes nControl does require a jailbreak to work. Prior to iOS/tvOS 13 it did NOT require code injection so it could have potentially worked on stripped down or 'rootless' style jailbreaks, now post 13 it does require code injection to function properly, so a full fledged jailbreak is required.
nControl does NOT require any specific jailbreak to work. That being said it's untested on rootless, and would probably not work there. Otherwise, any jailbreak from 7.0->14.0 should be capable of supporting nControl without any modifications.
9. What emulators have you tested this with?
Personally I've only used this extensively with Provenance, but theres no reason it shouldn't work with any emulators that support MFI controllers. We would definitely like to get as many emulators supported and easy to install as possible on both iOS and tvOS. Whether it be NDS, Wii, Dreamcast, we'd like to cover as many as possible.
10. Does it support the steam controller?
I've started implementing support for this controller, it is a massive bear to work with and requires a lot of different changes to nControl. At this point I've gotten code working for everthing except the track pad and the joysticks. Hopefully it gets wrapped up in the next release.
11. My device immediately disconnects after connecting.
Install the latest version, this bug should be completely fixed!
If you want a recentish version of provenance on iOS add my repo to cydia or sileo
Helping us add controller support:
1. SSH in to your AppleTV (or browse your file systems to find the error log file "/Library/Logs/controllersupport-Error.log")
2. Attempt to pair your unsupported device
3. Check the log file for an entry similar to:
found device: EVO VG010 with vid: 6473 pid: 1026, reportDescriptor: <05010906 a1018501 75019508 050719e0 29e71500 25018102 95017508 81039505 75010508 19012905 91029501 75039103 95147508 150026ff 00050719 0029ff81 00c0050c 0901a101 85037508 95018101 15002680 0319002a 80037510 95048100 c0050109 02a10185 060901a1 00050919 01290315 00250175 01950381 02750595 01810105 01093009 31158125 7f750895 02810609 38158125 7f750895 018106c0 c0050109 05a10185 070901a1 00093009 31093209 35150026 ff007508 95048102 c0093915 00250735 00463b01 65147504 95018142 75049501 81010509 1901290f 15002501 75019510 81020502 150026ff 0009c409 c5950275 08810275 08950181 01c0>
4. Send us this information in our discord channel
Debug logs are available at /Library/Logs/controllersupport-Error.log
A support channel exists on the jailbreak discord server in the #ncontrol room.
If you are having trouble pairing a controller (especially DS4, which are notoriously tempermental, you may want to try editing or outright deleting the file found based on this search query:
find ./ -type f -iname com.apple.MobileBluetooth.devices.plist
and example result will be somewhere like:
if you dont care about manually re-pairing all your bluetooth devices you can delete this file wholesale. otherwise, edit it and search for the mach address of your desired controller and remove its entry.