Как я могу построить определенную архитектуру, используя xcodebuild?

У меня есть устаревший код, который опирается на указатели 32-bit и хочу использовать xCodeBuild построить этот код из command line, Это не работает по какой-то причине. Вот команда, которую я использую:

xcodebuild -configuration Debug -arch i386 
  -workspace MyProject.xcworkspace -scheme MyLib

вот выход я получаю

[BEROR]No architectures to compile for 
  (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

Очевидно, он пытается построить x86_64 код и неудача с треском, так как я только включил i386 от VALID_ARCHS в настройках проекта xCode.

Есть ли способ, чтобы это понять, я не хочу 64-bit библиотека?

1 ответ

Решение

Вы должны установить ONLY_ACTIVE_ARCH в NO если ты хочешь xcodebuild использовать ARCHS параметры. Передав эти параметры, вы можете форсировать правильную архитектуру.

xcodebuild ARCHS=i386 ONLY_ACTIVE_ARCH=NO -configuration Debug -workspace MyProject.xcworkspace -scheme MyLib

Смотрите эту ссылку для деталей.

xcodebuild ONLY_ACTIVE_ARCH...
//or
Build Settings -> Build Active Architecture Only -> ONLY_ACTIVE_ARCH

YES - строить двоичный файл с единой архитектурой для подключенного устройства

NO - создать бинарный файл для конкретного -arch(valid architectures он же VALID_ARCHS), если он был указан, или для всех архитектур в других случаях

Рекомендация - использовать Yes для отладки (это экономит время сборки) и нет для сборки выпуска.

Примечание: бегать на симуляторе безопасно.

Чтобы проверить версию, используйте lipo -info [Около]

В Xcode ONLY_ACTIVE_ARCH имеет соответствующее поле под названием Build Active Architecture Only в Build Settings но логика та же

YES - XCode обнаружит подключенное устройство, определит архитектуру и будет опираться только на эту архитектуру.

NO - он будет опираться на все архитектуры (по умолчанию) или на арки в -arch(valid architectures ака VALID_ARCHS)

Для проверки версии используйте lipo -info

Кратко перечислите типы архитектуры во входном универсальном файле. Перечисляет названия каждого архива.

lipo -info <path to input file>

Узнайте больше здесь и здесь

Другие вопросы по тегам