Подтвердить что ты не робот

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

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

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

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

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

enable_bitcode = NO

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

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

4b9b3361

Ответ 1

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

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

# workaround for bitcode generation problem with Xcode 7.3 unset TOOLCHAINS

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

Ответ 2

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

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

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

Что работает для меня, когда он создает фреймворк без битов, заключается в следующем:

  • Выберите цель статической библиотеки (не совокупную) и выберите "Generic iOS device"
  • Очистите его
  • Выберите цель статической библиотеки, но выберите симулятор
  • Создайте его (работает, даже если он мгновен, потому что он не был очищен)
  • Выберите цель статической библиотеки, но снова выберите "Generic iOS device".
  • Построить его
  • Выберите общую цель для "универсального устройства iOS"
  • Наконец, постройте его
  • Если это не удалось, начните сначала. Мне иногда нужно сделать это два или три раза, прежде чем это сработает.

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

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

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

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

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