Today I’ve received a rejection letter from Apple, stating that the way
UIRequiredDeviceCapabilities is configured makes it impossible to install my app in any device.
You see, I never touched that setting in info.plist through the development process. It’s the one that comes with Cocos2D template.
The first thing I did was to fire up one of my previous projects, Chilly Zombies. That project simply does not include such setting, that is,
UIRequiredDeviceCapabilities is not even there.
As I learned later, this setting missing just means that your app doesn’t require anything specific from the device. Since this is Joe Rescuer’s case, I just deleted
UIRequiredDeviceCapabilities from the project, recompiled and resubmitted to the App Store. I guess I’m back at the end of the submission queue.
So, how does
UIRequiredDeviceCapabilities work? Essentially, you would either create the setting as either an array or a dictionary object.
If it’s an array, you would include items that are required by your app (i.e., “wifi”, “microphone”, etc).
If it’s a dictionary, then you would include boolean values: if your app needs “wifi”, add it and set it to “YES” (or check the box). If it doesn’t need it, do not add it. If you leave it there and set it to “NO” (or with the box unchecked), you are stating that the device must not have the capability. So, if you set a “wifi” value as “NO”, you are declaring that the device must not have wifi. This is what happened to me in this case. The included
UIRequiredDeviceCapabilities had every feature on the list, most of them set to “NO” (unchecked). This essentially said that my app couldn’t be installed in any device on Earth! Not on an iPhone 3G, not on an iPhone 3GS or an iPod Touch.
Anyway, as I mentioned before, simply removing the file took care of the problem (because my app doesn’t care whether there’s a mic or wifi on the device). Your needs may be different, so you’d better make sure by reading the corresponding Apple’s Application Programming Guide section.