web-dev-qa-db-ja.com

複数のアーキテクチャ(arm64、armv7、armv7s)のフレームワークを構築

Arm64、armv7、およびarmv7s用のプロジェクトビルドをTestFlightにアップロードしようとしています。別のプロジェクトのフレームワークを使用しています。しかし、フレームワークはarm64だけで構築されており、arm64(file was built for arm64 which is not the architecture being linked (armv7))では構築されていないようです。

問題は、すべてのアーキテクチャを含むフレームワークをどのように作成するかです。プロジェクトを分けておきたいです。そして、私はシミュレータを気にしません。リリース用にビルドされていることを確認したい。

これはフレームワークのターゲットです:

enter image description here

EDIT:私のプロジェクトはCordovaベースです。そのため、事前に構築されたフレームワークを利用するプラグインを使用しています。シミュレータとデバイスを含むファットフレームワークを構築し、それをlipoと連結するための手順があります。私が必要としているのは、私が持っていないデバイスのアーキテクチャでもあります。実際にそれらをまとめて連結するには、arm64、armv7、およびarmv7sの3つのデバイスが必要であることを意味しますか?

11
huggie

Appleは、iOS 11での32ビットのサポートを終了しました。32ビットアプリをiOS 11で実行したり、iOS 11を32ビットプロセッサで実行したりすることはできません。したがって、フレームワークのDeployment TargetをiOS 11より前のiOSバージョンに設定する必要があります。

10
clemens

集約ターゲットを作成して、すべてのプラットフォームをサポートするスクリプトを作成してみてください。これは私のプロジェクトの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}
0
Shohrab