Как сделать приложение для iPhone совместимым с несколькими версиями SDK (прошивки)
С выходом iOS4 я уже планировал включить iAd в будущие обновления моего приложения. Я предполагаю, что это сделает мое приложение непригодным для использования на прошивке ниже 4.0. Есть ли способ изменить эти переменные и файл.xib в зависимости от прошивки пользователя? Приветствия.
1 ответ
Решение
Да, вы можете собрать с последним SDK (то есть: 5.1) и по-прежнему работать на устройствах с более ранними версиями прошивки (SDK).
- Установите для своей цели развертывания самую раннюю версию, с которой вы хотите работать, то есть 3.0.
- Вы устанавливаете свой базовый SDK на последнюю версию, с которой вы компилируете, то есть: 5.0. Таким образом, вы можете ссылаться на новые определения и символы в вашем коде. В этой статье "SDK и цели развертывания" подробно рассматривается развертывание и базовый SDK.
- Слабая ссылка на библиотеки / фреймворки с символами, которые доступны только в более новой iOS. Это значит, что ваше приложение будет работать на устройстве, на котором нет новых символов.
- Вы должны проверить, что новый метод доступен, прежде чем вызывать его. Вы должны убедиться, что не вызываете метод 5.0 или 4.X, только когда ваше приложение находится на устройстве < 4.0. Конечно, вы должны изящно справляться с работой над старыми версиями, используя либо более старые методы, либо не поддерживая определенные функции, которые требуют более новой поддержки SDK.
- НОВИНКА с XCode 4.2: для поддержки старых устройств вам необходимо добавить armv6 в архитектуру сборки и удалить armv7 из списка необходимых возможностей устройства.
Посмотрите эти SO вопросы и ответы для более подробной информации:
- цель развертывания против базы / активного SDK
- рекомендуемый способ поддержки обратной совместимости
- Как при желании использовать функции iPhone 3.0 в приложении, совместимом с 2.0
- iPhone Dev Framework слабых ссылок
- слабая связь с IB
- универсальная ошибка компиляции приложения iphone/ipad
- приложения для iphone должны включать armv6