Ориентация на несколько платформ в iPhone SDK 4 - PullRequest
3 голосов
/ 01 июля 2010

У меня есть проект iPhone SDK, который должен создать статическую библиотеку для симулятора и процессора ARM, а затем объединить их в универсальную библиотеку.

Раньше я использовал iPhone SDK 3+ и выполнил это, создав отдельную цель для каждого, один симулятор и один ARM, а затем создал третью цель, которая объединяет их с помощью сценария оболочки. Цели развертывания / параметры сборки для каждой из составляющих целей установлены на соответствующие архитектуры и т. Д. Кроме того, iPhone SDK 3+ позволил мне выбрать «Базовый SDK» в раскрывающемся меню в верхнем левом углу основного XCode. окно.

Все работало отлично - тогда я обновился до SDK 4.

Теперь в выпадающем меню в левом верхнем углу нет списка «Базовый SDK». Кроме того, компилятор, похоже, полностью игнорирует целевые параметры развертывания. Даже если для одной из целей установлено «Устройство iPhone», а для другой - «Симулятор iPhone», они все равно строятся так, как указано в раскрывающемся меню.

В случае, если я не был достаточно ясен, вот оскорбительное оскорбляющее вышеупомянутое меню, которое мы все знаем и любим:

offending menu

Еще раз, в SDK 3 все работало отлично. Теперь в SDK 4, если установлено «Устройство», я получаю две библиотеки, созданные для ARM. Если он установлен на симулятор, я получаю две библиотеки, созданные для симулятора.

Кто-нибудь знает обходной путь для этой буллы?

Большое спасибо.

ОБНОВЛЕНИЕ: инструмент командной строки "xcodebuild" все еще работает, то есть он будет строить правильную архитектуру в соответствии с параметрами развертывания каждой цели.

Таким образом, вместо того, чтобы использовать графический интерфейс XCode для сборки, я могу использовать скрипт оболочки, который вызывает xcodebuild следующим образом:

xcodebuild -target device-target -configuration Debug
xcodebuild -target sim-target -configuration Debug

Было бы неплохо найти реальное решение, но сейчас оно выполнит свою работу.

Ответы [ 3 ]

3 голосов
/ 16 июля 2010

Да, Apple, похоже, запускает все элементы управления и опции XCode.Дошло до того, что я вообще не устанавливаю Beta SDK или GM / public SDK, если я близок к завершению приложения.Я знаю , что обновление что-то сломает.

В любом случае, вы должны иметь возможность создать внешнюю цель или цель сценария оболочки, которая строит каждую и связывает библиотеки вместе.У меня есть похожий скрипт для моей библиотеки bag-o-tricks.В настройках проекта XCode я установил BaseSDK для iPhone Device 4.0 SDK.Сценарий сборки выглядит примерно так:

xcodebuild -parallelizeTargets -configuration Debug -sdk iphoneos4.0 -target StaticLibs
xcodebuild -parallelizeTargets -configuration Debug -sdk iphonesimulator4.0 -target StaticLibs
xcodebuild -parallelizeTargets -configuration Release -sdk iphoneos4.0 -target StaticLibs
xcodebuild -parallelizeTargets -configuration Release -sdk iphonesimulator4.0 -target StaticLibs
mkdir -p build/Debug-dist build/Release-dist
lipo build/Debug-iphoneos/libfoo.a build/Debug-iphonesimulator/libfoo.a -create -output build/Debug-dist/libfoo.a
lipo build/Release-iphoneos/libfoo.a build/Release-iphonesimulator/libfoo.a -create -output build/Release-dist/libfoo.a

ОК, признаюсь, это развернутая версия.Мой фактический скрипт содержит набор циклов for thing in ${LIST_OF_STUFF}; do ... для лучшей автоматизации сборок, копирования всех включаемых файлов и сворачивания всего SDK.

Я отправил патч на Core-Plot , чтобы автоматизировать создание SDK для них.Если вы используете этот патч в качестве ссылки, удалите пару ключ / значение GCC_VERSION из списка SDKSettings.p иначе сборка приложений для него завершится неудачей.

1 голос
/ 19 июля 2010

Насколько я понимаю, «Базовый SDK» в настройках должен быть максимально возможным в SDK, а «Цель развертывания iPhone OS» (также в настройках) должна быть самой низкой, которая вам нужна.

Так, например, если вы хотите скомпилировать приложение для iPhone OS 3.1.2 и выше, вам нужно установить «Базовый SDK» на 4.0 и «iPhone OS Deployment Target» на 3.1.2.

0 голосов
/ 17 июля 2010

На iPhone sdk 4.0 apple удалены все версии iOS ниже 3.2.Если вы собираете для iPhone, он автоматически собирается для 4.0, а если вы собираете для iPad, он будет скомпилирован как 3.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...