База против Актива против цели Развертывания - PullRequest
25 голосов
/ 31 августа 2009

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

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

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

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

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

Заранее спасибо,

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

Ответы [ 4 ]

28 голосов
/ 31 августа 2009

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

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

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

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

8 голосов
/ 15 февраля 2010

Необходимо установить для параметра сборки базового SDK самый последний SDK, который содержит все функции, которые вы собираетесь использовать (обычно это последний доступный SDK), и для параметра сборки «iPhone Deployment Target» установите раннюю версию ОС, на которой вы хотите запустить.

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

3 голосов
/ 15 ноября 2012

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

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

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

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

У меня два айпада, а один 4.3. Мне страшно подумать, какой это будет беспорядок.

1 голос
/ 29 ноября 2013

В общем;

Установите BASE SDK на самый последний SDK, который вы готовы поддерживать и тестировать.

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

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

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

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

TargetSDK -> Базовый SDK

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

Lint -> Deploymate

...