Ответ 1
Хорошо, я сумел выяснить это после большого чтения!
По сути, 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, например Device 3.1.2. Но не забудьте скомпилировать ваше приложение под Device 3.0, Device 3.1 и Device 3.1.2 только для проверки предупреждений компилятора. Это обеспечит отсутствие у вас кода, обращающегося к методам/структурам, которых нет ни в одном SDK, вплоть до вашей цели развертывания.
Я надеюсь, что это поможет любому, кто находится в моем положении и не может найти простое объяснение того, как все это работает.
Руководство по совместимости SDK было очень полезным и информативным. Однако мне потребовалось немного больше, чтобы понять, как мне устроить концепцию и как все работает. Это изображение из руководства полезно:
(источник: apple.com)