[Xcode・Unity]"Invalid bitcode version "のエラーでビルドには成功するがアーカイブに失敗する
現象
ビルドは成功して実機デバッグはできるが、アーカイブは失敗する
エラーメッセージ
ld: could not reparse object file in bitcode bundle: 'Invalid bitcode version (Producer: '1316.0.21.2.3_0' Reader: '1300.0.29.30_0')', using libLTO version 'LLVM version 13.0.0, (clang-1300.0.29.30)' for architecture armv7
環境
name | version |
---|---|
Xcode | 13.2.1 |
Unity | 2019.4.37f1 |
FirebaseSDK | 9.0 / 9.1 |
原因
Xcode・外部SDK間で、外部SKD側の方が新しいbitcodeのバージョンを使用しているため起きるエラー。
アーカイブのときだけ起きるのは、USBデバッグ時はbitcodeへの変換が行われないため。
bitcodeって何
Bitcode is an Apple technology that enables you to recompile your app to reduce its size. The recompilation happens when you upload your app to App Store Connect or export it for Ad Hoc, Development, or Enterprise distribution.
(意訳)bitcodeはアプリをAppStoreConnectにアップロードしたりエクスポートする際に使用する我々Appleの偉大な技術なのだ。
BitcodeとはXcodeのビルドフローにおける中間言語(LLVM IR)のバイナリ表現です
というわけでアプリをAppStoreConnectにアップロードする際にサイズを削減したりよしなにしてくれるのがbitcode。
clangのバージョンが外部SDK側の方が新しいとXcode側が扱えないという問題ですね。
対応
bitcodeで使用しているclangのバージョンがXcode側が新しくなっていればOK。
- Xcode側を上げる
- 外部SDKを下げる
のどっちかの対応で解決します。
Xcodeをアップデートして対応する場合
今回だとXcode側が
Xcode 13.2.1 (13C100)Apple clang version 13.0.0 (clang-1300.0.29.30)
FirebaseSDK側が
Xcode 13.3.1 (13E500a)Apple clang version 13.1.6 (clang-1316.0.21.2.3)
のバージョンなので13.3.1以上にアップデートしてあげればOK。
外部SDK側のバージョンをダウングレードして対応する場合
今回はXcodeをアップデートするのが面倒だったのでSDK側を下げた。
↓からFirebaseSDK8.10.1をダウンロード
ビルドしたら通った。
でも時間に余裕があるならXcode側をアップデートしたほうがいい気がする。
その他
FirebaseSDKがどのbitcodeを使用しているかっていうのは事前にわからないのか?
→探した限りは見つからなかった。アーカイブするまで気づけないのが割とつらい。
参考
↑みんなSDKのバージョンを下げる方の対応をしてる🤔
↑とても助かりました🙇♂
Discussion