Подтвердить что ты не робот

Цель "База" против "Активный" и "Развертывание"

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

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

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

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

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

Спасибо заранее,

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

4b9b3361

Ответ 1

Разница между базовым и активным 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, однако они являются нетривиальными.

Ответ 2

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

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

Ответ 3

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

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

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

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

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

Ответ 4

В общем,

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

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

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

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

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

TargetSDK → базовый SDK

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

Lint → Deploymate