It looks like the only two possible options are WiFi and Bluetooth.
Also USB (but only for MFi accessories).
With WiFi I guess the accessory could act as a WiFi hotspot and the user would have to manually connect which would disconnect them, for example, from their home network. Is WiFi Direct a possibility here?
No. iOS does not support Wi-Fi Direct in any way, shape or form.
Would [Wi-Fi Direct] be an option if they joined the MFi program?
No.
On the Wi-Fi front the best option depends on the type of accessory. If the goal is to get the accessory on to the user’s existing Wi-Fi network (a good example of this might be a set of speakers intended for home use), Wireless Accessory Configuration is by far the best option.
On the other hand, if the accessory is typically used ‘in the field’,
NEHotspotConfigurationManager
might work well. In that case it’s good to pair Wi-Fi (for data transfer) and Bluetooth LE (for command and control).
You can learn more about iOS Wi-Fi management APIs in QA1942.
For classic bluetooth it seems that you can connect using a profile supported by iOS (like HID) without joining the MFi program. If you wanted to use a custom profile then would you have to join MFi?
For third-party developers classic Bluetooth in only available via:
A limited number of standard protocols, like HFP
An Apple-specific protocol that is available to MFi developers
The latter is accessed via the ExternalAccessory framework.
Finally, don’t forget HomeKit. There’s been a bunch of changes in that space recently, including a public spec and software-only authentication. If your accessory is typically used in the home, HomeKit is a great choice.
Given that you’re working on behalf of an existing commercial concern, my recommendation here is that you get in touch with the MFi folks. There’s a bunch of options here, many of which are only available to MFi licensees. That last point also puts a limit on how much we can discuss stuff here on the public DevForums.
Share and Enjoy
—
Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware
let myEmail = "eskimo" + "1" + "@apple.com"