I am trying to publish an app on the app store but was rejected due to MFi program. Apple states nothing further. I have been approved from the vendor. I have verified we are included in their MFi program with the vendor and supplied required forms. Can anyone advise on what is required more specifically or where I can provide further proof of MFi approval if app is rejected for this reason? Thanks!
Publishing an app with MFi approval
What did the rejection notice say? Generally, buried among the standard boilerplate is the suggestion of what your application submision is missing
As someone who has no idea what you've actually done, I've got equal reasons to suspect that
- You forgot to do something or your submitted application build was missing a setting for some reason.
- The vendor did something silly like add you to a list and then forgot to click some button to submit the list change for aproval. (Disclaimer: I've never seen the vendor side of the MFi program interface.)
- The reviewer clicked the wrong button, and all of this is going to get cleared up when you go into the resolution center, and confirm all of the requirements.
Please plase plase.
What do the people at Apple Review want? By the official statement (read link below), I understand there's aboslutely not needed to do such extra formal work in order to create an app for MFi certified accessory:
"
I want to develop an iOS app that communicates with an MFi accessory. Do I need to join the MFi Program?
No. iOS app developers do not need to join the MFi Program. Everything app developers need is in the External Accessory Framework, which is provided in the iOS SDK. To access the iOS SDK, please join the iOS Developer Program: https://developer.apple.com/programs/ios/
"
https://mfi.apple.com/MFiWeb/getFAQ.action#4-3
Does that mean, that Apple again forgot to mention one small "well, uh, oh, if ... you.. do not want the app go to App Store... " notice?
A MFi accessory will have a licensed chip. If the device is yours, you need to be in the MFi program to get that done.
If the device isn't yours, you need the id specific to that chip to be able to code for it, which the hardware maker would provide to you at their discretion. In your app review notes (iTunes Connect/(thatApp)/meta data, you need to explain your agreement, with the hardware maker, to Apple.
If you did that, and it seems like that proof was ignored, use the Resolution Center to try to make that clear.
No, if you're just developing the application that talks to the accessory, you don't need to join the MFi program.
The entity developing the accessory has to under various circumstances (they can't use the ExternalAccessory interface, and don't have access to various specifications otherwise).
If your application ends up using the ExternalAccessory API to talk to the accessory, then App Review checks that your app is on the list of approved applications. And any application that uses the ExternalAccessory API ends up having to specify in its application bundle which MFi protocols it speaks, so there's a check and double check to prevent an app from sneaking through the system.
So what the App Review people want is:
1. App Developer talks to the Accessory Developer and the Accessory Developer and they each tell the other party some information.
2. App Developer specifies the proper protocol string in the app bundle.
3. Accessory Developer pushes the right button to register the bundle identifier for the application as approved.
So both parties need something from the other party in order for the system to work. The app developer is probably going to get the necessary information from documentation, but the accessory developer needs to know something that only the app developer is going to know.
But that's just a matter of App Store approval at that point. While your app is in development, all you need to get the ExternalAccessory API working is the appropriate protocol specified in the application bundle's settings.
Note: If your application contains any reference at all to the ExternalAccessory API, even if it's buried in some library you're not using, you're app is probably going to get treated as if it is using the ExternalAccessory API. Dormant, unused code is only going to cause review problems.