I've developed a framework that supports the creation of software-based controllers and directs the input through a MFi profile, allowing you to have a single codebase that handles both software and hardware controllers. Many other features as well:
https://github.com/robreuss/VirtualGameController
NSNetservice is used for connectivity, and all Apple platforms are supported (iOS, OS X, watchOS and tvOS).
All features:
- Mimics API for Apple's GameController framework (GCController)
- Device motion support in software controllers
- Custom controller elements
- Custom element mapping
- WiFi-based, with Bluetooth fallback
- Controller-forwarding
- Works with Apple TV Simulator
- Unlimited number of hardware controllers on Apple TV (using controller forwarding)
- Ability to enhance inexpensive slide-on/form-fitting controllers with motion, extended profile elements and custom elements
- iCade controller support (mapped through the MFi profiles so they appear as MFi hardware)
- Easy-to-implement 3d touch on software controllers
- Leverage on-screen and Bluetooth keyboards using software controllers (including with Apple TV)
- Support for snapshots (compatible with Apple's snapshot format)
- Swift 2.1
- Framework-based