Ответ 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.