Технические вопросы и ответы QA1623

Почему я получаю ошибки поддержки устройства при загрузке моего приложения?

Q: Когда я загружаю обновление своего приложения, почему я получаю ошибку о поддержке предыдущих устройств?

A: Когда обновление работает на меньшем количестве устройств, чем версия приложения в настоящее время в App Store, подключение iTunes не позволяет загружать обновленную версию приложения. Это проектом.

Обновление к приложению должно работать на каждого клиента, уже купившего приложение и выполняющего текущую версию iOS.

У разработчиков, хотящих выпустить обновления, но удалить поддержку устройства, есть три выбора:

Возможные сообщения об ошибках

В зависимости от того, как Вы сужаете устройства Ваши поддержки приложений, Вы получите одно из двух сообщений об ошибках от XCode при загрузке обновления на App Store.

«Этот пакет недопустим. Ключ UIRequiredDeviceCapabilities в Info.plist может не содержать значения, которые препятствовали бы тому, чтобы это приложение работало на устройствах, поддерживавшихся предыдущими версиями».

Когда Вы видите это сообщение об ошибке, Вы добавили, что новое ограничение, под UIRequiredDeviceCapabilities вводят info.plist файл Вашего приложения.

«Этот пакет не поддерживает один или больше устройств, поддерживавшихся в предыдущем пакете для этого приложения. Пакеты должны продолжать поддерживать любые устройства, ранее поддерживаемые».

Когда Вы видите это сообщение об ошибке, Вы изменили «настройки сборки» семейства Целевого устройства (который изменяет ключ UIDeviceFamily 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

Новый документ, объясняющий, как иметь дело с ошибками от попытки сузить класс устройств поддержки приложений.