環境: XCode 7.0.1 モジュール: Objective-C バンドル タイプ: フレームワーク
こんにちは、armv7、armv7s、arm64、i386、および x86_64 をサポートするフレームワークを作成しようとしています。ファット ライブラリを作成するために集計を使用しています。集約スクリプト内で、2 つの xcodebuild コマンドを実行しています。また、ターゲット ビルド設定で Enable Bitcode=YES と Other C Flags=-fembed-bitcode を設定しました。予防措置として、私は ENABLE_BITCODE=YES および OTHER_CFLAGS="-fembed-bitcode" オプションを xcodebuild コマンドに追加しています
私のxcodeビルドコマンドは次のとおりです-
#Build The framework Target for iPhoneOS
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${AN_TARGET}"
ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphoneos
BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"
CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}" SYMROOT="${SYMROOT}"
ARCHS="armv7 armv7s arm64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION
#Build The framework Target for iPhoneSimulator
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${AN_TARGET}"
ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphonesimulator
BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"
CONFIGURATION_BUILD_DIR="${IPHONE_SIMULATOR_BUILD_DIR}" SYMROOT="${SYMROOT}"
ARCHS="i386 x86_64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION
上記の 2 つのコマンドを実行した後、これら 2 つのビルドを組み合わせて、以下のコマンドを使用してファット フレームワーク バイナリを作成しています。
# create a fat Framework
lipo -create
"${IPHONE_DEVICE_BUILD_DIR}/${PROJECT_NAME}.framework/${PROJECT_NAME}"
"${IPHONE_SIMULATOR_BUILD_DIR}/${PROJECT_NAME}.framework/${PROJECT_NAME}" -
output "${FRAMEWORK_FOLDER}/${AN_END_USER_FRAMEWORK_NAME}"
私が直面している問題は、リポが作成された後です。ビットコード対応アプリケーションで使用できません。を実行した後otool -l framework_binary | grep -LLVM
、ビットコードが有効なフラグまたは __LLVM が表示されません。
Lipo は、ファット バイナリからビットコードを削除します。lipo コマンドの実行中にビットコードを保持する方法はありますか?
訂正: Nestor からの返信に基づいて、otool コマンドを実行したところotool -l -arch armv7 framework_binary | grep LLVM
、驚いたことに、segname __LLVM clang が表示されました。ただし、同じファット フレームワーク バイナリを自分のプロジェクトに統合すると、シミュレーターでは正常にビルドされますが、デバイスでの実行中に次のエラーがスローされます - ld: 'MyBinary' にはビットコードが含まれていません。ビットコードを有効にして再ビルドするか (Xcode 設定 ENABLE_BITCODE)、ベンダーから更新されたライブラリを入手するか、このターゲットのビットコードを無効にする必要があります。アーキテクチャ用 armv7