Ответ 1
Когда вы обычно создаете библиотеку, ENABLE_BITCODE=YES
, Xcode добавляет флаг сборки -fembed-bitcode-marker
к любому вызову clang, помещая "пустой" биткод в последний файл o.
Итак, если вы посмотрите на компиляцию в фазе сборки, она будет выглядеть примерно так:
CompileC {build_path}/StaticBitcode/StaticLogger.o StaticBitcode/StaticLogger.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler cd {path}/StaticBitcode экспорт LANG = ru_US.US-ASCII экспорт PATH = "/Applications/Xcode.app/Содержание/Разработчик/Платформы/iPhoneOS.platform/Разработчик/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/USR/бен:/бен:/USR/SBIN:/SBIN" /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -arch armv7 -fmessage-length = 0 -fdiagnostics-show-note-include-stack -fmacro-backtrace -limit = 0 -std = gnu99 -fobjc-arc -fmodules -gmodules -fmodules-cache- [...] -fembed-bitcode-marker [...]
Это относится к действию сборки (независимо от цели).
Когда вы Build & Archive
, флаг -fembed
заменяется на -fembed-bitcode
, который действительно создает двоичный код с поддержкой битового кода:
CompileC {build_path}/StaticBitcode/StaticLogger.o StaticBitcode/StaticLogger.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler cd {path}/StaticBitcode экспорт LANG = ru_US.US-ASCII экспорт PATH = "/Applications/Xcode.app/Содержание/Разработчик/Платформы/iPhoneOS.platform/Разработчик/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/USR/бен:/бен:/USR/SBIN:/SBIN" /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -arch armv7 -fmessage-length = 0 -fdiagnostics-show-note-include-stack -fmacro-backtrace -limit = 0 -std = gnu99 -fobjc-arc -fmodules -gmodules -fmodules-cache- [...] -fembed-bitcode [...]
флаг fembed-bitcode
Учитывая, что
Если вы добавите флаг -fembed-bitcode
к флагам Other C, вы будете отправлять два флага в компилятор во время компиляции. Возможно, вы отключите некоторые предупреждения, которые вы можете получить при использовании библиотеки, связанной с другим проектом. Но вам нужно проверить, есть ли у вас ожидаемое поведение.:)
(Когда я тестировал с помощью -fembed-bitcode
на других флагах C, Xcode выдавал предупреждение clang: warning: argument unused during compilation: '-fembed-bitcode-marker'
)
BITCODE_GENERATION_MODE
С другой стороны,
Если вы установите BITCODE_GENERATION_MODE=bitcode
на User-defined Setting
, даже во время фазы сборки файлы будут скомпилированы с использованием флага -fembed-bitcode
.
И, если вы установите BITCODE_GENERATION_MODE=marker
, файлы будут скомпилированы с использованием флага -fembed-bitcode-marker
, независимо от фазы действия.
Итак, если вы хотите включить бит-код для каждого действия (сборка и архивирование), лучший способ сделать это - использовать параметр BITCODE_GENERATION_MODE
.