Что означает Base SDK, цель развертывания iOS, Target и Project в xcode

162

Скажем, я установил базовый SDK на 7, что это значит? Это может означать, что приложение будет работать на iOS 7. Но для этого и предназначена цель развертывания iOS.

Также, почему я указываю эти 3 значения как в проекте, так и в цели. Это не имеет смысла. Зачем указывать одно и то же дважды?

user4951
источник
Есть хороший краткий ответ на этот вопрос по другому более новому вопросу: stackoverflow.com/a/41278576/498949
Крис Рей

Ответы:

80

Базовый SDK - это то, против чего вы строите свое приложение (то есть включаете и библиотечные файлы и фреймворки). Как вы говорите, это не влияет на цель развертывания, за исключением того, что базовая sdk> = цель развертывания.

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

Например, у меня есть проекты как с OSX, так и с iOS, некоторые из них ARC, а некоторые MRR. Мне бы пришлось иметь разные проекты для каждого, если бы я не мог указать параметры сборки с уровнем детализации, который позволяет Xcode.

trojanfoe
источник
197

В iOS 7 TechTalk , сессия Архитектура современных приложений, часть 2, они объясняют это ясно

введите описание изображения здесь

Приятного чтения Привет! Я доступен!

Таким образом, современное приложение может использовать iOS 9 в качестве Target SDK и iOS 7 в качестве цели развертывания. Это означает, что вы можете работать на iOS 7, iOS 8 и iOS 9 и что вам доступны любые вызовы iOS 9 при фактической работе на iOS 9.

Вы можете прочитать больше в моем посте SDK и Deployment Target

onmyway133
источник
20
Хорошая ссылка ... и эта часть похоронена около 25:17 в этом 50-минутном видео.
Даниил
2
Ницца! Но что произойдет, если вы установите Base SDK = 7.0 и попытаетесь установить в iOS 8.0? Нужно ли загружать последний XCode для поддержки самого последнего базового SDK?
GoRoS
2
@ chichilatte нет, тебе не нужно. Приложение по-прежнему поддерживает iOS 12, iOS 13, ... но у него не будет никаких новых функций iOS 12, iOS 13 .... Чтобы использовать новую функцию iOS 12, необходимо скомпилировать ее с iOS 12 SDK и использовать API от iOS 12.
onmyway133
3
Спасибо, это имеет смысл. Я думаю, что комментарий @ Kunal-Balani выше неправильный.
Чичилатте
2
@ Кунал-Балани, остальные комментаторы верны. Вам не нужно перекомпилировать ваше приложение, если появится более новая версия ОС, чем та, с которой вы собрались, если только они не убрали поддержку того, что ваше приложение использует в настоящее время . Новая ОС не означает, что приложение, созданное на основе более старого SDK, перестает работать. Если бы это было так, никто бы никогда не обновился, потому что это означало бы, что каждое приложение, которое у них было в данный момент, просто перестало бы работать, пока не вышли новые версии, что просто не соответствует действительности.
Марк А. Донохо,
67

Базовый SDK - это SDK, на который вы ссылаетесь. Deployment Target - это минимальная требуемая версия iOS, необходимая для запуска приложения. Вы можете создать приложение с SDK 7, работающим под iOS 6. Но тогда вы должны позаботиться о том, чтобы не использовать какие-либо функции или методы, которые недоступны в iOS 6. Если вы это сделаете, ваше приложение вылетит на iOS 6, как только эта функция используется.

Более подробную информацию смотрите в документации Apple: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html

V1ru8
источник