環境:XCodeの7.0.1 モジュール:Objective-Cの バンドルタイプ:フレームワークビットコードオプションを使用して太いフレームワークを作成するにはどうすればよいですか?
こんにちは、私はi386とx86_64版のARMv7、armv7s、arm64をサポートするフレームワークを作成しようとしています。私は太いライブラリを作るために集合体を使用しています。集約スクリプトの中で、私は2つのxcodebuildコマンドを実行しています。1. armv7、armv7s、arm64、および2. i386とx86_64アーキテクチャ用。また、ターゲットビルドの設定でEnable Bitcode = YESと他のCフラグ= -fembed-bitcodeを設定しました。予防mesasureとして、私は追加していENABLE_BITCODE = YESとOTHER_CFLAGS =「 - fembed-ビットコード」
私のXcodeはコマンド構築xcodebuildコマンドのオプションあり、次のように -
#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}"
問題IAM向いている以下のコマンドを使用して、脂肪のフレームワークバイナリを作るために構築し、私はビットコード対応アプリケーションでそれを使用することができません。 otool -l framework_binary | grep -LLVM
を実行した後、ビットコードを有効にしたフラグや__LLVMが表示されません。
Lipoは、脂肪のバイナリからビットコードを削除します。 lipoコマンドを実行しているときにビットコードを保持できる方法はありますか?
修正:Nestorからの返信に基づいて、私はotool -l -arch armv7 framework_binary | grep LLVM
というotoolコマンドを実行しました。驚いたことに、segname __LLVM clangを見ることができました。しかし、私は同じ脂肪のフレームワークのバイナリをプロジェクトに統合すると、シミュレータ上で正常に構築されますが、デバイス上で実行されている間に次のエラーがスローされます - ld: 'MyBinary'にビットコードが含まれていません。ビットコードを有効にして(Xcode設定ENABLE_BITCODE)再構築するか、ベンダから更新されたライブラリを入手するか、このターゲットのビットコードを無効にする必要があります。アーキテクチャのためのarmv7
「grep -LLVM」ではなく「grep LLVM」でなければなりませんか? – l00phole
ここで同じ問題があります。 * .aにはlipoの前にビットコードが含まれますが、後には含まれません。 – Nestor
iphoneosのバイナリ(つまりlipoで統合される前のデバイス)がビットコードを持っているかどうか確認しましたか?それがなければ、ビットコードセクションを削除するのはlipoではありません。 –