8
10

More than 3 years have passed since last update.

Xcode 12 で自作 framework ビルド時に lipo コマンドがエラーを吐くようになった

Posted at

現象

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 を検討する必要がありそうです。

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10