Обновление приложений для iOS6

Не удалось найти точный ответ на этот вопрос на форумах разработчиков Apple.

Как и в случае с другими разработчиками Apple, я буду обновлять наши приложения для поддержки устройств iOS6. Я загрузил XCode 4.5, который поддерживает SDK iOS6.

Я понимаю, что я не могу отправлять версии своего приложения в хранилище приложений с помощью этой сборки XCode:

  • если я перекомпилирую и создаю приложение с использованием целевого объекта развертывания 6.0 и исправлю все известные проблемы, например. устаревшие методы и т.д., когда Apple выпускает GM для iOS6, будет ли сборка компилироваться и работать с устройствами iOS5?

  • Должен ли я просто отправлять приложения с целью развертывания версии 5.0 или они не смогут работать в iOS6?

  • Если целью моего развертывания является только iOS6, если я использую новые функции iOS6?

(недоуменно).

Ответ 1

Поскольку это довольно общий вопрос о поддержке нескольких версий iOS и не распространяется на какие-либо специфические вещи iOS6 (покрытые NDA), здесь идет мой ответ:

если я повторно скомпилирую и создаю приложение, используя цель развертывания 6.0 и исправлю все известные проблемы, например. устаревшие методы и т.д., когда Apple выпускает GM для iOS6, будет ли сборка компилироваться и работать с устройствами iOS5?

В принципе, да, это произойдет, если вы не использовали какую-либо функцию только для iOS6 или не сделали это правильно (см. ответ на третий вопрос). Тем не менее, тестирование против реального устройства, работающего под управлением iOS5/4 (или симулятора), является почти обязательным, если вы хотите быть уверенным, что все работает правильно.

Существует также вероятность того, что что-то, что в настоящее время работает в более старой версии iOS, просто сломается на iOS6 (это может произойти в случае добавления некоторых ошибок, но также и в случае исправления некоторых ошибок, и бывает, что ваш код был ошибка, которая противодействовала эффекту первого). Итак, тестирование - это король. (Спасибо за комментарий rsswtmr об этом).

Должен ли я просто отправлять приложения с целью развертывания в 5.0 или не работать в iOS6?

Вы можете указать цель развертывания 5.0, если ваше приложение не использует никакой функции iOS6 (или вы делаете это правильно, прочитайте позже); другими словами, этот параметр не нарушит совместимость с iOS6;

Если целью моего развертывания является только iOS6, если я использую новые функции iOS6?

Он может, но это не единственный способ.

Если вы укажете цель развертывания как iOS6, то вы можете свободно использовать любую функцию iOS6 в своем приложении без проблем. Механизм магазина приложений предотвратит установку вашего приложения на любом более старом устройстве, и вы будете в безопасности.

С другой стороны, если вы укажете цель развертывания как iOS5 или старше, то вы все равно можете использовать любую функцию только для iOS6 в своем приложении, но вы должны правильно поддерживать более старые версии iOS, "защищая" любое использование iOS6 - только функции и обеспечение резервной копии для iOS5.

Это означает следующее: скажем, что вы собираетесь использовать featureA только на iOS6; что вы можете сделать:

  • проверьте, доступна ли эта функция во время выполнения (например, класс отвечаетSoSelector и т.д.);

  • защитите свой код в #ifdef, чтобы он был скомпилирован только по возможности;

  • если проверка на 1. завершится неудачно, определите выход для более старых версий iOS.

Взгляните на это сообщение на поддержку нескольких версий iOS.

Ответ 2

Установите "базовый SDK" на Последний iOS и "Цель развертывания iOS" на более раннюю версию, которую вы планируете поддерживать (iOS 5.0).

Добавить условный код для использования функции, доступной в последней версии iOS без сбоев в старой, поддерживаемой.

Раздел "Условное кодирование" в этом руководстве Apple может оказаться полезным. Также проверьте другие вопросы по теме в SO.