База в сравнении с Активной целью в сравнении с целью развертывания

StackOverflow https://stackoverflow.com/questions/1358033

Вопрос

Я знаю, что часть этого вопроса была задана в нескольких вариантах, но я хочу убедиться, что я все понял правильно.

Вот мои предположения и понимания, которые я хочу знать, верны ли они, прежде чем отправлять.

Мое приложение предполагает функции, поддерживаемые всеми ОС, и поэтому я должен:

  1. Установите для активного SDK последнюю версию (в настоящее время SDK 3.0).
  2. Установите целью развертывания тот уровень, который я хочу, чтобы поддерживался - iPhone 2.0 и выше?
  3. Для чего именно нужен Базовый SDK?должен ли я игнорировать это, если я выбрал Active SDK как другой, и где я вижу Active SDK в настройках проектов?

И последний вопрос - разрешает ли Apple выбирать iPhone OS 2.0 в качестве цели развертывания?

Заранее благодарю,

BTW - одна из моих главных причин этого вопроса заключается в том, что при компиляции с более ранними SDK у Apple, похоже, возникла проблема с освобождением памяти для массива анимации UIImageView, когда эта анимация была сохранена для многократного использования.Это известная проблема, которая была исправлена с помощью SDK 3.0 (простым установлением для массива анимации UIImageView значения nil)

Это было полезно?

Решение

Разница между базовым и активным SDK заключается в том, что первый является SDK по умолчанию, установленным для проекта, а второй - SDK, на основе которого вы в данный момент создаете.Таким образом, ваш Активный SDK может быть базовым SDK, и в этот момент XCode будет использовать SDK, указанный вами для проекта.

Чтобы создать свое приложение для как можно более широкого набора устройств, вы правы:

  • Установите для базового SDK самый последний из возможных SDK (3.0, 3.0.1).
  • Установите для целевого развертывания как можно более ранний SDK (2.0).

Apple разрешает вам указывать iPhone 2.0 в качестве цели развертывания, но имейте в виду, что любой API или фреймворк, выпущенный после iPhone 2.0, по умолчанию будет недоступен для использования.Есть такие методы использования функций из более поздних пакетов SDK, однако они нетривиальны.

Другие советы

Вам следует установить для параметра сборки базового SDK значение последней версии SDK, содержащей все функции, которые вы собираетесь использовать (обычно это последняя доступная версия SDK), а для параметра сборки "Цель развертывания iPhone" - самую раннюю версию операционной системы, на которой вы хотите работать.

Затем вам нужно убедиться, что вы проверяете во время выполнения любые функции, которые могут отсутствовать в более ранних операционных системах.

"Базовый SDK" - это максимальный SDK, который может поддерживать ваше приложение.Здесь есть жесткое ограничение - вы не можете выбрать будущий, неизданный SDK.

"Цель развертывания" - это минимальный пакет SDK, который вы готовы поддерживать.Это то, насколько далеко в прошлое вы готовы вернуться.

Xcode, по-видимому, создает ложную зависимость от "Цели развертывания". Например, я не могу разрабатывать на своем iPod с iOS 5.1.1 с помощью Xcode 4.5.2 (Xcode 4.5.2 работает в паре с iOS 6.0), даже несмотря на то, что в этой установке установлены API-интерфейсы 4.3, 5.0 и 5.1 и симуляторы.Мне нужно использовать симулятор или разъем на моем iPhone с iOS 6.0.

Игры, в которые играет Apple, похоже, тоже вызывают проблемы с приложениями.Моя купленная копия Elements не будет синхронизирована через iTunes с iPod, потому что для запуска Elements требуется более новая версия iOS (она синхронизируется и отлично работает на моем iPhone iOS 6.0).

У меня есть два айпада, и один стоит 4.3.Я содрогаюсь при мысли, к какому беспорядку это приведет.

В целом;

Установите для БАЗОВОГО SDK самый последний SDK, который вы готовы поддерживать и тестировать.

Установите в качестве цели развертывания самую низкую версию iOS, которую вы готовы поддерживать и тестировать.

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

Альтернативным / дополняющим процессом было бы использование Deploymate http://www.deploymateapp.com/ который выполняет статический анализ кода для выявления проблем.

Если вы из мира Android, то аналогии таковы;

targetSdk -> Базовый SDK

minSdk -> Цель развертывания

Lint -> Развернуть

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top