Почему я получаю ошибки поддержки устройства при загрузке моего приложения?
Q: Когда я загружаю обновление своего приложения, почему я получаю ошибку о поддержке предыдущих устройств?
A: Когда обновление работает на меньшем количестве устройств, чем версия приложения в настоящее время в App Store, подключение iTunes не позволяет загружать обновленную версию приложения. Это проектом.
Обновление к приложению должно работать на каждого клиента, уже купившего приложение и выполняющего текущую версию iOS.
У разработчиков, хотящих выпустить обновления, но удалить поддержку устройства, есть три выбора:
Фиксируйте их приложение так, чтобы оно могло работать над устройствами, которые они первоначально определяют для поддержки. Посмотрите Поддержку Всех Устройств для подробных данных.
Target более новая версия iOS, требующего более нового устройства. Посмотрите Предназначение для Последнего iOS для подробных данных.
Удалите их приложение из хранилища и загрузите новое приложение с различным пакетом ID. Посмотрите Замену Вашего Приложения в Хранилище для подробных данных.
Возможные сообщения об ошибках
В зависимости от того, как Вы сужаете устройства Ваши поддержки приложений, Вы получите одно из двух сообщений об ошибках от XCode при загрузке обновления на App Store.
«Этот пакет недопустим. Ключ UIRequiredDeviceCapabilities в Info.plist может не содержать значения, которые препятствовали бы тому, чтобы это приложение работало на устройствах, поддерживавшихся предыдущими версиями».
Когда Вы видите это сообщение об ошибке, Вы добавили, что новое ограничение, под
«Этот пакет не поддерживает один или больше устройств, поддерживавшихся в предыдущем пакете для этого приложения. Пакеты должны продолжать поддерживать любые устройства, ранее поддерживаемые».
Когда Вы видите это сообщение об ошибке, Вы изменили «настройки сборки» семейства Целевого устройства (который изменяет
Предназначение для Последнего iOS
Обновление к приложению может всегда требовать более новой версии iOS. Это отбросит поддержку устройств, которые не могут выполнить ту версию iOS.
«Развертывание iOS Target» установка сборки является минимальной версией iOS Ваши поддержки приложений. Ваше приложение не может устанавливаться или работаться любое устройство, которое не может выполнить ту версию iOS.
Поддержка armv6
Поскольку armv7 процессор требуется, чтобы выполнять версии iOS позже, чем 4.2.1, ставить «цель Развертывания iOS» к 4,3 или позже означает, что Вы больше не должны создавать свое приложение для armv6.
Например, если Ваше приложение больше не создается с armv6, Вы не должны добавлять armv7 к Вашему UIRequiredDeviceCapabilities. Это может заставить XCode или Подключение iTunes ошибочно отклонять Ваше обновление.
Поддержка всех устройств
Можно обнаружить возможности устройства и операционной системы, на которой работает приложение, и выборочно включите или отключите опции как надлежащие. Посмотрите Используя Проверки на этапе выполнения для Создания Условных Путей выполнения кода для получения дополнительной информации.
В то время как хорошо отключать опцию, не поддерживающуюся устройством, Ваше приложение работает, знать, что приложения не будут приняты в App Store, если у них не будет достаточной функциональности с функцией отключенной. (См. «Инструкции по Анализу App Store» 2.12.)
Проверка доступность новой функциональности в коде
Класс Objective C перечисления 1:
if([NewClass class]){ |
NewClass * myObject = [[NewClass alloc] init]; |
} else { |
//NewClass not supported on this system… |
} |
Метод Objective C перечисления 2:
if [myObject respondsToSelector:@selector(updatedMethod)]) { |
[myObject updatedMethod]; |
} else { |
// -updatedMethod not supported on this system… |
} |
Постоянное перечисление 3:
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]; |
} |
Функция перечисления 4:
if (NewFunction != NULL) { |
NewFunction(...); |
} else { |
// NewFunction not supported on this system… |
} |
Пример кода:
MessageComposer является проектом в качестве примера, поддерживающим старые системы при использовании современного APIs.
Замена приложения в хранилище
Удаление Вашего приложения от хранилища и загрузка обновления с различным пакетом ID, позволят Вам сужать диапазон устройств Ваши поддержки обновления. Однако, обновление будет перечислено на хранилище как отдельное приложение. Существующие пользователи Вашего приложения должны купить обновление через App Store, точно так же, как новые клиенты.
Поскольку обновление будет обработано как различное приложение, оно должно иметь другое имя в Подключении iTunes, чем имя приложения уже в хранилище.
Для получения дополнительной информации о работе с Подключением iTunes см. Руководство разработчика Подключения iTunes.
История версии документа
| Дата | Примечания |
|---|---|
| 18.09.2012 | Добавленная информация о предназначении для последней версии iOS. |
| 23.12.2010 | Новый документ, объясняющий, как иметь дело с ошибками от попытки сузить класс устройств поддержки приложений. |