Целевой объект развертывания Xcode и целевой объект развертывания проекта

Извините за мое незнание, но в чем разница в Xcode между полем «Цель развертывания» в разделе «Цели» и целью развертывания в разделе «Проект»?

Что произойдет, если цель развертывания моего проекта - 3,2, а цель приложения iOS - 4,0? Или наоборот?


person Alex    schedule 18.08.2011    source источник


Ответы (3)


Целевые настройки имеют приоритет над настройками проекта. Настройки проекта действительны для всех целей, чьи настройки не были отменены.

person Ole Begemann    schedule 18.08.2011
comment
Должны ли они тогда быть установлены на одно и то же значение? или цель приложения iOS ›= цель развертывания проекта, потому что, если она будет перезаписана более высокой из цели, она не будет работать на более низкой iOS? - person Boris Gafurov; 02.12.2014
comment
Если у вас есть только одна цель в вашем проекте (или если все цели должны использовать одну и ту же цель развертывания), просто установите ее один раз для своих проектов, и цели унаследуют настройку. Если у вас есть несколько целей с разными настройками цели развертывания, вы должны явно установить ее для всех целей, которые отклоняются от настройки уровня проекта. - person Ole Begemann; 02.12.2014
comment
@OleBegemann, Ваш ответ был плагиатом здесь - person James Webster; 23.10.2015
comment
@JamesWebster: Спасибо, но это всего лишь два предложения, давайте не будем придавать этому большого значения. - person Ole Begemann; 23.10.2015
comment
Я вижу, что это принятый ответ, но он кажется неправильным. Я добавляю ответ, который должен лучше отражать различия, включая ссылку на документы Apple для справки. - person Andrej; 03.04.2020

ОБНОВЛЕНИЕ: Как пояснил г-н. @Edward, версия на уровне проекта служит по умолчанию, тогда как версия на целевом уровне переопределяет значение по умолчанию. .

На самом деле это написано в документации Apple:

Целевые настройки имеют приоритет над настройками проекта.

Базовый SDK ни с чем не связан.

Исходное сообщение:

Глядя на ссылку в документации Apple ... Похоже, когда вы устанавливаете версию на целевом уровне, вы указываете минимальную требуемую версию, которую пользователь может иметь для запуска вашего приложения.

С другой стороны, задав версию на уровне проекта, вы указываете, какие SDK доступны вам при разработке. Таким образом, если API доступен только для последней версии, вы получите сообщение об ошибке компилятора, уведомляющее вас о том, что вам нужно по-другому обрабатывать поведение при отсутствии API (возможно, используя #available или @available).

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

Вот как я понимаю изображение выше:

  • вы можете использовать все API из основной версии,
  • ваши пользователи могут загрузить приложение, только если у них установлена ​​как минимум целевая версия развертывания
  • вы можете использовать API до версии Base SDK
  • API-интерфейсы выше базовой версии SDK недоступны в вашем проекте.
person Andrej    schedule 03.04.2020
comment
Цель развертывания iOS на странице проекта не является базовым SDK. Независимо от того, изменяете ли вы цель развертывания iOS через пользовательский интерфейс Xcode для проекта или целевого объекта, в файле проекта изменяемая переменная всегда IPHONEOS_DEPLOYMENT_TARGET. - person Edward Brey; 20.10.2020
comment
Хм, я бы сказал, что это просто досадное совпадение, что затронутая переменная имеет одно и то же имя для обоих изменений в project.pbxproj файле (как @EdwardBrey заметил, что это имя IPHONEOS_DEPLOYMENT_TARGET). Однако это все еще не полностью проясняет, почему используются две разные настройки, но на самом деле deployment_target имеет два разных значения в пользовательском интерфейсе проекта и в целевом пользовательском интерфейсе. - person Andrej; 20.10.2020
comment
IPHONEOS_DEPLOYMENT_TARGET в project.pbxproj встречается 4 раза, если у вас есть проект только с 1 целью. Я предполагаю, что это 2 раза для настройки проекта (отладка и выпуск) и 2 раза для настройки цели (опять же, отладка и выпуск). - person Andrej; 20.10.2020
comment
Как вы заметили, по умолчанию цель имеет два экземпляра IPHONEOS_DEPLOYMENT_TARGET : один для отладки и один для выпуска. У проекта есть соответствующая пара. Все 4 свойства относятся к цели развертывания. Ни один из них не относится к базовому SDK. Названия объектов точно описывают их назначение. Причина наличия двух пар заключается в том, что проект используется по умолчанию, тогда как цель служит необязательными переопределениями. - person Edward Brey; 20.10.2020

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

Чтобы установить цель для наследования от проекта, вы не можете использовать раздел Общие → Информация о развертывании. Вместо этого перейдите в «Параметры сборки» → «Развертывание», а для цели развертывания iOS выберите «Другое ...» и введите $(inherited).

person Edward Brey    schedule 20.10.2020