ビットコードが有効になっているフレームワークをリリースする必要がありますが、これは面倒です。プロジェクトの設定で「ビットコードを有効にする」を「はい」に設定すると、実際のデバイスとシミュレーターの両方でクリーンにビルドされます。
ライブラリをテストしたかったので、この目的のために作成した新しいアプリにライブラリを統合しましたが、現在はシミュレーター用にのみビルドされています。実際のデバイス用にビルドしようとすると、次のようになります。
ld: '/path/to/Framework.framework/Company(File.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
私が言ったように、私はビットコードを有効にしてビルドしたので、なぜこれが起こるのかわかりません。
何か案は?ありがとう
AFAIK、Xcodeを使用してアプリをビルドすると、アーカイブを作成するときにのみビットコードが含まれます。その理由は、アプリ/ライブラリをデバッグまたはテストするだけの場合にコンパイル時間を短縮することです。
Xcodeが各ビルドでビットコードを発行するようにするには、-fembed-bitcode
フラグをOther C flags
およびOther linker flags
に追加します。
また、バイナリにビットコードが含まれているかどうかを確認する最も簡単な方法は、otool
とgrep
を使用することです。
otool -l binary_name | grep __LLVM
ビットコードがある場合は1つ以上のsegname __LLVM
エントリが表示され、ない場合は空の出力が表示されます。
Xcodebuildコマンドを使用してビットコードを有効にするには、追加する必要があります
BITCODE_GENERATION_MODE=bitcode.
以下のコマンドを見つけてください
xcodebuild BITCODE_GENERATION_MODE=bitcode -target TARGETNAME ONLY_ACTIVE_Arch=NO -configuration Release -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
RunScriptコードを使用した別の方法:(ビルド設定-ビルドフェーズRunScript)
# define output folder environment variable
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
# Step 1. Build Device and Simulator versions
xcodebuild -target TARGETNAME ONLY_ACTIVE_Arch=NO -configuration Release -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target TARGETNAME -configuration Release -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
# make sure the output directory exists
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
# Step 2. Create universal binary file using lipo
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a"
# Last touch. copy the header files. Just for convenience
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"