【Flutter Xcode】AgoraRtmKit contains bitcode エラーの解決方法
FlutterのAgoraパッケージを使用していて、iOSのBitcodeの問題でビルドに失敗する問題についてです。
環境
environment:
sdk: ">=3.5.0 <4.0.0"
flutter: 3.24.0
dependencies:
agora_rtc_engine: ^6.3.2
agora_rtm: ^1.5.9
- Xcode16
Codemagicのビルド時にiOSでPublishing Error
Publishing artifact Runner.app.dSYM.zip
Publishing micoly_user_app.ipa to App Store Connect
> app-store-connect publish --path /Users/builder/clone/build/ios/ipa/app.ipa --key-id hogehoge --issuer-id hogehoge --private-key @env:APP_STORE_CONNECT_PUBLISHER_PRIVATE_KEY
Publish "/Users/builder/clone/build/ios/ipa/app.ipa" to App Store Connect
App name: App
Bundle identifier: com.app
Certificate expires: 2024-10-10T01:13:13.000+0000
Distribution type: App Store
Min os version: 14.0
Provisioned devices: N/A
Provisions all devices: No
Supported platforms: iPhoneOS
Version code: 10
Version: 1.0.10
Upload "/Users/builder/clone/build/ios/ipa/app.ipa" to App Store Connect
Running altool at path '/Applications/Xcode-16.0.app/Contents/SharedFrameworks/ContentDeliveryServices.framework/Frameworks/AppStoreService.framework/Support/altool'...
Running altool at path '/Applications/Xcode-16.0.app/Contents/SharedFrameworks/ContentDeliveryServices.framework/Frameworks/AppStoreService.framework/Support/altool'...
2024-10-21 07:32:06.525 *** Error: [ContentDelivery.Uploader.0000] Asset validation failed (90482) Invalid Executable. The executable 'Runner.app/Frameworks/AgoraRtmKit.framework/AgoraRtmKit' contains bitcode. (ID: 00000)
2024-10-21 07:32:06.681 [ContentDelivery.Uploader.0000]
=============
UPLOAD FAILED with 1 error.
=============
{"tool-version":"8.003.16003","tool-path":"\\/Applications\\/Xcode-16.0.app\\/Contents\\/SharedFrameworks\\/ContentDeliveryServices.framework\\/Versions\\/A\\/Frameworks\\/AppStoreService.framework","os-version":"14.7.0","product-errors":[{"message":"Asset validation failed","userInfo":{"NSUnderlyingError":"Error Domain=IrisAPI Code=-19241 \\"Asset validation failed\\" UserInfo={status=409, detail=Invalid Executable. The executable 'Runner.app\\/Frameworks\\/AgoraRtmKit.framework\\/AgoraRtmKit' contains bitcode., id=0000, code=STATE_ERROR.VALIDATION_ERROR.90482, title=Asset validation failed, NSLocalizedFailureReason=Invalid Executable. The executable 'Runner.app\\/Frameworks\\/AgoraRtmKit.framework\\/AgoraRtmKit' contains bitcode., NSLocalizedDescription=Asset validation failed}","NSLocalizedDescription":"Asset validation failed","iris-code":"STATE_ERROR.VALIDATION_ERROR.90482","NSLocalizedFailureReason":"Invalid Executable. The executable 'Runner.app\\/Frameworks\\/AgoraRtmKit.framework\\/AgoraRtmKit' contains bitcode. (ID: 0000)"},"code":90482}]}
Failed to upload archive at "/Users/builder/clone/build/ios/ipa/micoly_user_app.ipa"
Failed to publish /Users/builder/clone/build/ios/ipa/app.ipa
Failed to publish app.ipa to App Store Connect.
Publishing app-release.aab to Google Play
Published app-release.aab to track production
> google-play tracks get --track production --package-name com.app
Track: production
Releases: [
Status: completed
Name: 1.0.10
Version codes: [
517
]
]
Build failed :|
Publishing failed :|
Failed to publish app.ipa to App Store Connect.
エラーの内容を確認すると、iOSアプリのビルド自体は成功していますが、アップロード時にApp Store Connectの検証に失敗していました。
具体的には、AgoraRtmKit.frameworkがBitcodeを含んでいることが原因で、以下のエラーメッセージが表示されています。
Asset validation failed (90482) Invalid Executable. The executable 'Runner.app/Frameworks/AgoraRtmKit.framework/AgoraRtmKit' contains bitcode.
AgoraRtmKit contains bitcode エラーの解決方法3つ
BitcodeはiOSアプリにコンパイルされた中間コードで、App Store Connectにアップロードする際にBitcodeを含めない設定が必要みたいです。
具体的な解決策として以下3つがあるようです。(解決した人もいるし、解決していない人もいて曖昧)
- Bitcodeを無効化する
- Agora SDKのBitcodeを含まないバージョンの使用
- Podのインストール後にフレームワークのBitcodeを削除する処理を自動化
とりあえず、試していきましょう。
1. Bitcodeを無効化する
以下の参考記事にもある通り、Bitcodeの設定をNOにすることで解決できるようです。
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
...省略
config.build_settings['ONLY_ACTIVE_ARCH'] = 'YES'
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "i386 arm64"
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
end
installer.pods_project.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
end
僕の場合は、すでにXcode上でBitcodeはNOに設定済みで、GithubのissueにあるPodsの修正も対応済みですが、ビルドに失敗しているので、上記のコードを追加で対応して、明確にENABLE_BITCODE
をNO
としました。
しかし、エラーは解決しなかったです。
2. Agora SDKのBitcodeを含まないバージョンの使用
パッケージの変更履歴を見る限り、そもそも根本的に改善はされていないみたいです。
3. Podのインストール後にフレームワークのBitcodeを削除する処理を自動化
Podファイルに以下コードを追加します。
今回は、2つのAgora
パッケージ(agora_rtc_engine
とagora_rtm
)を使用しているので、それぞれに含まれるFramework
のビットコードを削除する必要があります。
よって、Podfile
で対応するframework_paths
には、両方のSDKを含めましょう。
post_install do |installer|
...省略
bitcode_strip_path = `xcrun --find bitcode_strip`.chop!
def strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
framework_path = File.join(Dir.pwd, framework_relative_path)
command = "#{bitcode_strip_path} #{framework_path} -r -o #{framework_path}"
puts "Stripping bitcode: #{command}"
system(command)
end
framework_paths = [
# Agora SDKのフレームワークパスを指定(Podsディレクトリ確認してパスをコピーすればOK)
"Pods/AgoraRtcEngine_iOS/AgoraRtcKit.xcframework/ios-arm64_armv7/AgoraRtcKit.framework/AgoraRtcKit",
"Pods/AgoraRtm_iOS/AgoraRtmKit.xcframework/ios-arm64_armv7/AgoraRtmKit.framework/AgoraRtmKit"
]
framework_paths.each do |framework_relative_path|
strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
end
end
僕はこちらの対応をすることで、エラーは解消されて、Xcode上でビルド・アーカイブ・バリデーション(検証)まで合格することができました!
Bitcodeを削除することに問題はない
ビットコードを手動で削除する影響で、以下理由から技術的にはアプリの動作に影響を与えないケースが多いです。
- ビットコードは、AppleがApp Store上で将来的にアプリを再最適化できるようにするための中間バイトコードで、アプリの実行には影響を与えないため、ビットコードを削除しても通常は問題なく動作する
- Appleはビットコードを含まないバイナリも受け入れているため、削除してアップロードすることに問題はない
- 今後のSDKアップデート時に再度同じ対応が必要になる場合がある
参考記事
- https://developer.apple.com/documentation/xcode-release-notes/xcode-14-release-notes
- https://qiita.com/pugiemonn/items/dd7c88205b72b3bcdb5a
- https://note.com/resan0725/n/n49c2f5ce67e6
- https://stackoverflow.com/questions/79045739/error-during-app-distribution-asset-validation-failed-due-to-bitcode-in-agora-f
- https://www.linkedin.com/posts/abdallah-mohamed-🇵🇸-0b4270183_flutter-bitcodeabrproblem-activity-7253361610935681027-9LaP?utm_source=share&utm_medium=member_desktop