使用Fastlane构建App时遭遇Bitcode依赖问题求助
GitHub Actions + Fastlane 构建iOS应用Bitcode报错解决方案
问题背景
我正在GitHub搭建iOS应用的CI流水线,使用Fastlane的build_app构建应用并上传至App Store,构建过程中因依赖库FirebaseAnalytics不含Bitcode报错。
报错信息
ld: '/Users/runner/Library/Developer/Xcode/DerivedData/App-hktscdrwwpxombeaagjploucipfj/Build/Intermediates.noindex/ArchiveIntermediates/App/BuildProductsPath/Release-iphoneos/XCFrameworkIntermediates/FirebaseAnalytics/AdIdSupport/FirebaseAnalytics.framework/FirebaseAnalytics(FIRAEvent.o)' does not contain bitcode.You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. file '/Users/runner/Library/Developer/Xcode/DerivedData/App-hktscdrwwpxombeaagjploucipfj/Build/Intermediates.noindex/ArchiveIntermediates/App/BuildProductsPath/Release-iphoneos/XCFrameworkIntermediates/FirebaseAnalytics/AdIdSupport/FirebaseAnalytics.framework/FirebaseAnalytics' for architecture arm64
当前Fastlane配置(build_app部分)
build_app( workspace: use_workspace ? ENV['WORKSPACE_PATH'] : nil, project: !use_workspace ? ENV['PROJECT_PATH'] : nil, scheme: "App", output_directory: File.dirname(ENV['OUTPUT_PATH']), output_name: File.basename(ENV['OUTPUT_PATH']), clean: true, export_method: ENV['EXPORT_METHOD'], export_team_id: ENV['TEAM_ID'], silent: true )
构建环境版本
| 项 | 值 |
|---|---|
| xcode_path | /Applications/Xcode_13.2.1.app |
| gym_version | 2.214.0 |
| export_method | app-store |
| sdk | iPhoneOS15.2.sdk |
已尝试无效的操作
- 在Info.plist中添加
ENABLE_BITCODE=false配置,未解决问题 - 本地Xcode可直接设置禁用Bitcode,但本人为Windows用户无法操作
疑问
既然Bitcode已被苹果弃用,是否应用中只要有部分组件含Bitcode,所有组件都必须支持?
解决方案
1. 通过Fastlane build_app直接传递禁用Bitcode的编译参数
在build_app配置中添加build_flags参数,强制关闭Bitcode:
build_app( # 保留原有所有配置... build_flags: "ENABLE_BITCODE=NO" )
如果需要针对特定Target设置,可使用更精准的参数:
build_flags: "-target App ENABLE_BITCODE=NO"
2. 直接修改Xcode项目文件(适合无法操作Xcode的Windows用户)
通过GitHub Actions的Shell命令修改.xcodeproj中的project.pbxproj文件,全局替换Bitcode配置:
sed -i '' 's/ENABLE_BITCODE = YES;/ENABLE_BITCODE = NO;/g' ${PROJECT_PATH}/project.pbxproj
如果使用CocoaPods管理依赖,还需确保Pods项目的Bitcode也被禁用,可添加:
sed -i '' 's/ENABLE_BITCODE = YES;/ENABLE_BITCODE = NO;/g' Pods/Pods.xcodeproj/project.pbxproj
将上述命令添加到Fastlane执行build_app之前的步骤中。
3. 升级FirebaseAnalytics到最新版本
新版本的Firebase库已经移除了Bitcode支持,升级到最新版本可彻底避免该问题。修改Podfile:
pod 'Firebase/Analytics', '~> 10.0' # 替换为当前最新版本号
然后在流水线中执行pod install更新依赖。
疑问解答
是的,Xcode构建时遵循"全有或全无"原则:只要项目中任意一个Target开启了Bitcode,所有依赖的静态库、框架都必须包含Bitcode。即使苹果已弃用Bitcode,但只要项目配置中未全局关闭,就会触发该检查。
内容的提问来源于stack exchange,提问作者Armand Biestro
相关产品推荐
相关产品推荐

