現象
iOS用に自作の framework を fat でビルドしていました。(おそらくここをコピペ。)
Xcode 12 に上げたところ、下記のようなエラーが出るようになってしまいました。
fatal error: lipo:
***/Debug-iphonesimulator/***.framework/***
and
***/Debug-iphoneos/***.framework/***
have the same architectures (arm64) and can't be in the same fat output file
※ 見やすいように伏字と改行を入れています。
原因
Xcode 12 から、iPhoneシミュレーターも arm64 向けにビルドするようになったようで、従来実機にのみ含まれていたのが両方に含まれるようになり、コンフリクトしてしまったようです。
参考: Stackoverflow: iOS 14, lipo error while creating library for both device and simulator
解決策
以下は、とりあえず従来と同じように、シミュレーターに arm64 向けビルドが含まれないようにする方法です。 Apple Silicon 搭載の mac だと動作しない可能性があります。
(1) ビルドスクリプトの中から lipo -create ...
の行を探す。
(自分の場合、 Build Phase の Run Script に lipo コマンドを含んだビルドスクリプトを記述しています。)
lipo -create -output \
"${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" \
"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" \
"${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"
(2) その上の行に、iphonesimulator
のビルドから arm64 を除去する記述を追加。
lipo \
-remove arm64 \
"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" \
-output \
"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}"
最後に
上述しましたが、おそらく将来の Apple Silicon 搭載の mac では動作しません。Xcode 11 から使える XCFramework を検討する必要がありそうです。