⛏️

[Xcode・Unity]"Invalid bitcode version "のエラーでビルドには成功するがアーカイブに失敗する

2022/07/11に公開

現象

ビルドは成功して実機デバッグはできるが、アーカイブは失敗する

エラーメッセージ

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の偉大な技術なのだ。
https://developer.apple.com/documentation/xcode/doing-basic-optimization-to-reduce-your-app-s-size

BitcodeとはXcodeのビルドフローにおける中間言語(LLVM IR)のバイナリ表現です

https://akataworks.hatenadiary.jp/entry/2015/12/07/202455

というわけでアプリをAppStoreConnectにアップロードする際にサイズを削減したりよしなにしてくれるのがbitcode。
clangのバージョンが外部SDK側の方が新しいとXcode側が扱えないという問題ですね。

対応

bitcodeで使用しているclangのバージョンがXcode側が新しくなっていればOK。

  • Xcode側を上げる
  • 外部SDKを下げる
    のどっちかの対応で解決します。

Xcodeをアップデートして対応する場合

https://gist.github.com/yamaya/2924292
の対応表を見て、エラーメッセージにあるバージョンより新しいXcodeにすればOK。
今回だと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をダウンロード
https://developers.google.com/unity/archive

ビルドしたら通った。
でも時間に余裕があるならXcode側をアップデートしたほうがいい気がする。

その他

FirebaseSDKがどのbitcodeを使用しているかっていうのは事前にわからないのか?
→探した限りは見つからなかった。アーカイブするまで気づけないのが割とつらい。

参考

https://forum.unity.com/threads/build-failed-after-firebase-analytics-added-invalid-bitcode-version.1287884/
↑みんなSDKのバージョンを下げる方の対応をしてる🤔

https://zenn.dev/bon/articles/xcode-invalid-bitcode-version
↑とても助かりました🙇‍♂

Discussion