xcodebuild 7.3 не может включить биткод

Я разрабатываю встроенный фреймворк для iOS. Для того, чтобы сделать универсальный жир (со слайсами симулятора и устройства), я создал агрегатный таргет со скриптом, который использует для его генерации команды xcodebuild и lipo, как это делают многие люди.

В XCode 7.x мне пришлось добавить пользовательские настройки с BITCODE_GENERATION_MODE=bitcode, чтобы включить его, но это перестало работать с момента последнего выпуска XCode 7.3.

Я пробовал все, что нашел в Интернете, например, добавить OTHER_CFLAGS="-fembed-bitcode", но все работает по-прежнему...

Я видел это в журнале сборки:

enable_bitcode = НЕТ

ENABLE_BITCODE всегда НЕТ, независимо от того, что я делаю.

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


person Alejandro Jiménez Agudo    schedule 23.03.2016    source источник
comment
Мы отслеживаем эту проблему в Apple с ошибкой № 25389361, на которую вы можете ссылаться, если решите зарегистрировать повторяющуюся ошибку или иным образом сообщить о проблеме. Спасибо за поднятую тему!   -  person Rick Ballard    schedule 28.03.2016
comment
Это решено в бета-версии Xcode 8.0, выпущенной 13 июня.   -  person Rick Ballard    schedule 22.06.2016


Ответы (2)


Вчера столкнулся с похожей проблемой. После некоторого исследования проблема, возникающая при запуске xcodebuild из фазы сборки «Выполнить сценарий» в любой цели Xcode, похоже, связана с явной спецификацией используемой цепочки инструментов, выполненной с помощью переменной ENV TOOLCHAINS.

Поэтому, пока Apple не выпустит исправленную версию Xcode 7.3, вы можете попробовать добавить в начало своего скрипта следующую команду:

# workaround for bitcode generation problem with Xcode 7.3 unset TOOLCHAINS

Это должно быть безвредно, так как эта переменная env не устанавливается по умолчанию, когда вы запускаете xcodebuild из командной строки, и этот обходной путь отлично работает в моем случае.

person jlj    schedule 27.03.2016
comment
Как инженер Apple я могу подтвердить, что это подходящий обходной путь. - person Rick Ballard; 28.03.2016
comment
Спасибо @RickBallard за это подтверждение! - person jlj; 28.03.2016
comment
@RickBallard есть какие-либо обновления для выпущенной версии 7.3.1? Пожалуйста посоветуй. - person Harit K; 17.06.2016
comment
@HaritK Это решено в бета-версии Xcode 8.0, выпущенной 13 июня. - person Rick Ballard; 22.06.2016
comment
@RickBallard Я ценю ваш ответ. Хотя мне еще предстоит получить бета-версию xCode 8 и попробовать. - person Harit K; 30.06.2016

Я столкнулся с той же проблемой. Так же, как и вы, BITCODE_GENERATION_MODE и OTHER_CFLAGS="-fembed-bitcode" просто игнорируются, и мои сборки сломались

Я заметил, что иногда это работает, а иногда нет. Кажется, что если вы создаете фреймворк (или совокупную цель) для симулятора, биткод исчезает, независимо от того, что у вас есть в командах xcodebuild.

Я использую Xcode 7.3, и у меня есть 2 цели: статическая библиотека и совокупная цель для создания толстой структуры.

Что работает для меня, когда он создает структуру без битового кода, так это:

  • Выберите цель статической библиотеки (не совокупную) и выберите «Универсальное устройство iOS».
  • Убери это
  • Выберите цель статической библиотеки, но выберите симулятор
  • Создайте его (работает, даже если это происходит мгновенно, потому что он не был очищен)
  • Выберите цель статической библиотеки, но снова выберите «Универсальное устройство iOS».
  • Построить это
  • Выберите совокупную цель для «Универсального устройства iOS».
  • Наконец, построить его
  • Если это не удалось, начните сначала. Иногда мне нужно сделать это два или три раза, прежде чем это сработает.

Когда я это делаю, в моей толстой библиотеке оказывается биткод.

Вы можете легко проверить, поддерживает ли ваш фреймворк биткод, запустив otool -arch armv7 -l <framework_path> | grep LLVM

Чтобы сломать его снова, просто создайте совокупную цель для симулятора. Библиотека по-прежнему будет толстой, но биткода больше нет.

Кто-то, конечно, может найти решение, которое работает каждый раз, но, по крайней мере, оно устраняет проблему для меня.

Мне, конечно, не нужно было делать это с Xcode 7.2, и я не знаю, как это работает для чистых сборок CLI.

person Arnaud Barisain-Monrose    schedule 24.03.2016
comment
Спасибо за Ваш ответ. Решение, которое я применил для своего проекта, было похоже на ваше. Я компилировал вручную (с помощью XCode, не со скриптом) фреймворк для устройства, а затем симулятор, и, наконец, использовал свой скрипт только для их слияния с lipo. Но посмотрите обходной путь от @jlj, вы все равно можете использовать свой скрипт, добавив только одну строку. - person Alejandro Jiménez Agudo; 27.03.2016