Arm64、armv7、およびarmv7s用のプロジェクトビルドをTestFlightにアップロードしようとしています。別のプロジェクトのフレームワークを使用しています。しかし、フレームワークはarm64だけで構築されており、arm64(file was built for arm64 which is not the architecture being linked (armv7)
)では構築されていないようです。
問題は、すべてのアーキテクチャを含むフレームワークをどのように作成するかです。プロジェクトを分けておきたいです。そして、私はシミュレータを気にしません。リリース用にビルドされていることを確認したい。
これはフレームワークのターゲットです:
EDIT:私のプロジェクトはCordovaベースです。そのため、事前に構築されたフレームワークを利用するプラグインを使用しています。シミュレータとデバイスを含むファットフレームワークを構築し、それをlipo
と連結するための手順があります。私が必要としているのは、私が持っていないデバイスのアーキテクチャでもあります。実際にそれらをまとめて連結するには、arm64、armv7、およびarmv7sの3つのデバイスが必要であることを意味しますか?
Appleは、iOS 11での32ビットのサポートを終了しました。32ビットアプリをiOS 11で実行したり、iOS 11を32ビットプロセッサで実行したりすることはできません。したがって、フレームワークのDeployment TargetをiOS 11より前のiOSバージョンに設定する必要があります。
集約ターゲットを作成して、すべてのプラットフォームをサポートするスクリプトを作成してみてください。これは私のプロジェクトの1つからのサンプルスクリプトです。
unset TOOLCHAINS #Xcode 7.3 BUG FIX http://stackoverflow.com/questions/36184930/xcodebuild-7-3-cant-enable-bitcode
# define output folder environment variable
C_PROJECT_NAME="<<YOUR_FRAMEWORK_NAME>>"
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
# Step 1. Build Device and Simulator versions
xcodebuild -target <<YOUR_FRAMEWORK_NAME>> ONLY_ACTIVE_Arch=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target <<YOUR_FRAMEWORK_NAME>> ONLY_ACTIVE_Arch=NO -configuration ${CONFIGURATION} -sdk iphonesimulator -Arch i386 -Arch x86_64 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
rm -rf ./${C_PROJECT_NAME}.framework
cp -R ${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/${C_PROJECT_NAME}.framework ./
# Step 2. Create universal binary file using lipo
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${C_PROJECT_NAME}.framework/${C_PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${C_PROJECT_NAME}.framework/${C_PROJECT_NAME}"
mv ${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME} ./${C_PROJECT_NAME}.framework/${C_PROJECT_NAME}