Как указать Xcode на старый SDK, чтобы его можно было использовать в качестве базового SDK?

Настройка моего Mac:

Том A:
OS X 10.8
Xcode 4.5 или более поздней версии — SDK 10.6 НЕ доступен в качестве базового SDK

Том B:
OS X 10.7
Xcode 4.3.3–10.6 SDK IS доступен как базовый SDK

Том C:
OS X 10.6
Xcode 4.2–10.6 SDK IS доступен как базовый SDK


На томе A я установил Xcode 4.5, который не включает SDK 10.6 в качестве доступного «базового SDK» в настройках сборки моих целей сборки.

У меня есть отдельный том 10.6 и том 10.7 на этом жестком диске, на обоих из которых установлен Xcode, и оба позволяют мне выбрать SDK 10.6 в качестве базового SDK в моих настройках сборки Xcode Build Targets.

Я знаю, что у меня установлен SDK 10.6 на томе C (в /Developer/SDKs из более старой установки Xcode).

Как я могу указать Xcode на томе A на SDK 10.6, который находится на томе C?


person Todd Ditchendorf    schedule 11.07.2012    source источник


Ответы (4)


Вам нужно будет добавить символическую ссылку на старый SDK (как правило, это проще, чем копирование).

cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
ln -s /path/to/old/SDK .

Это нормально работает до 10.5. Дальше все немного сложнее...

Хотя в будущих версиях Xcode нет никаких обещаний, что это будет поддерживаться, я поговорил об этом с командой Xcode, и они, похоже, не заинтересованы в изменении этого в ближайшее время.

Лично я часто храню /path/to/old/SDK в каталоге верхнего уровня под названием /SDKs. Таким образом, каждый раз, когда я обновляюсь, легко все исправить.

РЕДАКТИРОВАТЬ: у меня есть скрипт fix-xcode, который упрощает повторное применение этого исправления при каждом обновлении Xcode.


ОБНОВЛЕНИЕ: в современных версиях Xcode (7.3+) для использования старых SDK отредактируйте MinimumSDKVersion здесь:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist
person Rob Napier    schedule 11.07.2012
comment
Это удивительный совет. Работает и для iPhoneOS, просто измените соответствующие пути - person Aleksandar Vacić; 11.09.2013
comment
Обратите внимание, что Xcode не отображает имена разных SDK. Вы получаете несколько вариантов с одним и тем же именем. Методом проб и ошибок определите, какой SDK вам нужен. - person HyBRiD; 11.09.2013
comment
как вы можете убедиться, что проект создан с использованием надлежащего SDK при архивировании? - person ohayon; 11.09.2013
comment
Это отлично сработало для меня в Xcode5 и iOS. Мои шаги: перейдите в каталог Xcode5 SDK. Добавьте символическую ссылку на старый SDK следующим образом: ln -s /Applications/Xcode4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk iPhoneOS6.1.sdk Используя этот метод, Xcode показывает имя старого SDK в списке вместе с новейшим SDK. - person plusbryan; 13.09.2013
comment
Для чего бы это ни стоило, вам также нужно скопировать SDK симулятора, а затем обязательно запустить симулятор с правильной версией. - person Jason; 19.09.2013
comment
Я изменил этот скрипт, чтобы сделать его более надежным. gist.github.com/gngrwzrd/6628214 - person gngrwzrd; 19.09.2013
comment
Как можно использовать этот сценарий, чтобы разрешения не были неверными? - person Bob Spryn; 25.10.2013
comment
Запустив Xcode 5.0.1 на Mavericks, мне пришлось скопировать SDK, а не символическую ссылку, чтобы заставить его работать. Похоже, он не хотел переходить по символической ссылке. Может дело в безопасности? - person Ryan Ballantyne; 03.11.2013
comment
Вторя @RyanBallantyne, для Xcode 5.1 на Mavericks с использованием SDK iOS 7.0 мне пришлось скопировать полные папки SDK и перезапустить Xcode, чтобы это заработало. - person kraftydevil; 08.05.2014
comment
У меня не было проблем с переходом по символическим ссылкам. Я до сих пор использую свой оригинальный скрипт fix-xcode при каждом обновлении Xcode (а также на нескольких новых машинах). Интересно, почему разница. - person Rob Napier; 08.05.2014
comment
для тех, кому интересно, как редактировать Info.plist для iPhone: он находится в двоичном формате и должен быть сначала преобразован sudo plutil -convert xml1 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Info.plist затем измените его, не нужно преобразовывать его обратно в двоичный файл, чтобы он работал (кроме, возможно, производительности) - person Jens; 27.04.2016
comment
Использование символической ссылки работало в бета-версии Xcode 8 для ссылки на SDK 10.11, расположенный в Xcode 7.3. - person dbainbridge; 18.06.2016
comment
Минимальная версия SDK УДИВИТЕЛЬНА! Спасибо - person MattD; 30.08.2016
comment
Меня это не шокирует; они серьезно переписали и, вероятно, сломали его, наконец. Это никогда не поддерживалось. Рекомендуемое решение — установить цель развертывания. developer.apple.com/library/content/documentation/IDEs/ Xcode9 finally (finally!) может определить, что вы использовали неподдерживаемые функции, поэтому этот метод следует менее необходимо. - person Rob Napier; 08.08.2017

Неправильный подход. Вы не «указываете» Xcode на SDK. Вместо этого вам больше повезет, скопировав SDK в соответствующую папку «SDK» для установки Xcode. В современных установках Xcode это обычно:

Xcode.app/Содержание/Разработчик/Платформы/MacOSX.platform/Разработчик/SDK/

Скопируйте туда SDK, закройте и перезапустите Xcode и посмотрите, что вы найдете.

(читая другой ответ здесь, я думаю, что символическая ссылка может быть вариантом, если вы твердо намерены сохранить исходный SDK в другом месте)

person danielpunkass    schedule 11.07.2012
comment
Спасибо, Даниил, как раз то, что мне было нужно. Я не знал, куда делась папка SDK. Должен был догадаться, что в эти дни он хранится внутри Xcode.app. - person Todd Ditchendorf; 11.07.2012
comment
Я нашел это более простым решением, чем попадание в смайлинк, как предлагает Роб Нейпир. Мне нужна была только 6.1, так как 7.0 только что вышла и взорвала интерфейс моего приложения на основе 6.0. - person ctlockey; 24.09.2013
comment
Я не согласен - добавление фактического SDK приводит к серьезным обновлениям. Хранение старых SDK на корневом уровне является лучшим и более стабильным вариантом в долгосрочной перспективе. - person Jono Guthrie; 23.09.2014

Почему бы не просто символически связать SDK? "лн -с"? Если это не сработает, потребуется взлом plist.

person Byron    schedule 11.07.2012
comment
Да, но проблема была в том, что я даже не знал, куда символически связать его to. Не беспокойтесь, другие ответили с необходимой мне информацией. - person Todd Ditchendorf; 11.07.2012

Решено путем просмотра более старой версии Xcode.App/Developer/platform и копирования iOS 6.1 SDK в ту же папку XCode 5.

person Guesto    schedule 03.02.2014