Ладно, после долгих чтений мне удалось это выяснить!
По сути, Active SDK - это просто переопределение базового SDK во время сборки. По умолчанию, когда базовый SDK изменяется, он автоматически меняет цель развертывания на ту же ОС, что и SDK. Поэтому, когда я захотел собрать приложение под SDK 3.1.2, но запустить его на ОС 3.0, я изменил Active SDK на 3.1.2, но это автоматически изменило минимальную ОС (цель развертывания). Я увидел это, посмотрев файл Info.plist в содержимом пакета в моем файле .app.
Поэтому лучше всего установить базовый SDK на последний SDK (в настоящее время 3.1.2), а затем вручную установить для целевого объекта развертывания 3,0 ОС. Если 2 отличаются, то они больше не будут автоматически меняться.
Однако это означает, что ваше приложение может быть установлено на устройстве 3.0, которое может иметь 3.0, 3.1 или 3.1.2 SDK. Поэтому для любых используемых вами структур, методов или свойств, которые доступны только в SDK более 3.0, вам придется использовать условно .
Когда вы приступите к созданию приложения, убедитесь, что Active Target установлен так же, как ваш базовый SDK, например Устройство 3.1.2. Но не забудьте скомпилировать ваше приложение под Device 3.0, Device 3.1 и Device 3.1.2 только для проверки предупреждений компилятора. Это обеспечит отсутствие у вас кода, обращающегося к методам / структурам, которых нет ни в одном SDK, вплоть до цели развертывания.
Надеюсь, это поможет любому, кто находится на моем месте и не может найти простое объяснение того, как все это работает.
Руководство по совместимости SDK было очень полезным и информативным. Однако мне потребовалось немного больше, чтобы понять, как мне устроить концепцию и как все работает. Это изображение из руководства полезно:
(источник: apple.com )