Why am I getting device support errors when uploading my app?
Q: Why am I getting an error about supporting previous devices when I upload an update of my app?
A: iTunes Connect does not allow uploading an updated version of an app when the update runs on fewer devices than the version of the app currently in the App Store. This is by design.
An update to an app must work for every customer who has already purchased the app, and is running a current version of iOS.
Developers who wish to issue updates, but remove device support, have three choices:
Fix their app so that it can work on the devices they originally set out to support. See Supporting All Devices for details.
Target a newer version of iOS that requires a newer device. See Targeting the Latest iOS for details.
Remove their app from the store, and upload the new app with a different bundle ID. See Replacing Your App in the Store for details.
Possible Error Messages
Depending on how you narrow the devices your app supports, you will get one of two error messages from Xcode when uploading your update to the App Store.
"This bundle is invalid. The key UIRequiredDeviceCapabilities in the Info.plist may not contain values that would prevent this application from running on devices that were supported by previous versions."
When you see this error message, you have added a new constraint, under the
"This bundle does not support one or more of the devices that were supported in the previous bundle for this app. Bundles must continue to support any devices previously supported."
When you see this error message, you have changed the "Targeted Device Family" build setting (which modifies the
Targeting the Latest iOS
An update to an app can always require a newer version of iOS. This will drop support for devices that cannot run that version of iOS.
The "iOS Deployment Target" build setting is the minimum version of iOS your app supports. Your app cannot be installed or run on any device that cannot run that version of iOS.
armv6 Support
Because an armv7
processor is required to run versions of iOS later than 4.2.1, setting the "iOS Deployment target" to 4.3 or later means you no longer have to build your app for armv6
.
For example, if your app is no longer built with armv6
, you should not add armv7
to your UIRequiredDeviceCapabilities
. This may cause Xcode or iTunes Connect to erroneously reject your update.
Supporting All Devices
You can detect capabilities of the device and operating system your app is running on, and selectively enable or disable features as appropriate. See Using Runtime Checks to Create Conditional Code Paths for more information.
While it is fine to disable a feature that is not supported by the device your app is running on, be aware that apps won't be accepted into the App Store if they don't have sufficient functionality with the feature disabled. (See "App Store Review Guidelines" 2.12.)
Checking for availability of new functionality in code
Listing 1 Objective-C Class:
if([NewClass class]){ |
NewClass * myObject = [[NewClass alloc] init]; |
} else { |
//NewClass not supported on this system… |
} |
Listing 2 Objective-C Method:
if [myObject respondsToSelector:@selector(updatedMethod)]) { |
[myObject updatedMethod]; |
} else { |
// -updatedMethod not supported on this system… |
} |
Listing 3 Constant:
if (&kNewConstant != NULL) { |
[myObject methodWithOption:kNewConstant]; |
} else { |
// kNewConstant not supported on this system, |
//using it will cause a crash trying to load from NULL |
[myObject methodWithOption:kOldConstant]; |
} |
Listing 4 Function:
if (NewFunction != NULL) { |
NewFunction(...); |
} else { |
// NewFunction not supported on this system… |
} |
Sample Code:
MessageComposer is an example project that supports old systems, while using modern APIs.
Replacing Your App in the Store
Removing your app from the store, and uploading the update with a different bundle ID, will allow you to narrow the range of devices your update supports. However the update will be listed on the store as a separate app. Existing users of your app must purchase the update through the App Store, just like new customers.
Because the update will be treated as a different app, it must have a different name in iTunes Connect than the name of the app already in the store.
For more information on working with iTunes Connect see the iTunes Connect Developer Guide.
Document Revision History
Date | Notes |
---|---|
2012-09-18 | Added information about targeting the latest version of iOS. |
2010-12-23 | New document that explains how to deal with errors from attempting to narrow the class of devices an app supports. |
Copyright © 2012 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2012-09-18