Bitcode is an abstract encoding of an app that can be used to re-compile it in different ways, given a set of instructions. You can confirm whether your binary is bitcode-compatible by running :
otool -l (my .o or .a file) | grep __LLVM
.
When you build normally, Xcode adds the build flag -fembed-bitcode-marker
to any clang invocation.
To Add -fembed-bitcode
: select project Build Settings -> Other C flags, set Debug to -fembed-bitcode-marker
and Release to -fembed-bitcode
this will build your lib with bitcode.
BITCODE_GENERATION_MODE
If you set BITCODE_GENERATION_MODE=bitcode
on your User-defined Setting, even during the build phase, the files will be compiled using the flag -fembed-bitcode
.
And, if you set BITCODE_GENERATION_MODE=marker
, the files will be compiled using the flag -fembed-bitcode-marker
, independent of the action phase.
So, if you want to enable the bitcode to every action (build and archive), the better way to do so is using the BITCODE_GENERATION_MODE
setting you can do so either manual or by script.
Manual
On Build Settings, click on the + sign at the top to add a user-defined build setting with the name BITCODE_GENERATION_MODE
, and set Debug to marker
, Release to bitcode
.
Edit schema as Release Then link the library.a file and get the build path get the library form Release folder
Script
xcodebuild BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build