Xcode 16 Beta 中 BoringSSL-GRPC 编译错误解决方案
更新到 Xcode 16 Beta 后构建应用时提示错误:
BoringSSL-GRPC unsupported option '-G' for target 'arm64-apple-ios15.0'
问题描述
当开发者将开发环境升级到 Xcode 16 Beta 后,使用 CocoaPods 管理的项目(尤其是 Flutter 项目)在构建过程中常会遇到以下错误:
BoringSSL-GRPC: Unsupported option ‘-G’ for target ‘arm64-apple-ios15.0’
这是因为 Xcode 16 对编译选项进行了更严格的检查,而 BoringSSL-GRPC 中的某些过时编译选项不再被支持。常见触发场景包括:
- 使用
firebase_core
、cloud_firestore
等依赖 gRPC 的 Firebase 库 - 项目 Podfile 中引用了
BoringSSL-GRPC
- 升级 Xcode 前未更新所有依赖库
验证问题
可在终端执行以下命令快速复现问题:
bash
cd ios
pod install
flutter build ios
推荐解决方案
方法一:更新所有依赖库(推荐首选)
此问题已在 Firebase 和 Flutter 的最新版本中修复。确保使用以下版本或更高:
yaml
# pubspec.yaml
dependencies:
flutter:
sdk: flutter
firebase_core: ^3.6.0 # 最低要求 3.6.0
firebase_auth: ^5.3.1 # 最低要求 5.3.1
cloud_firestore: ^5.4.4 # 最低要求 5.4.4
操作步骤:
- 升级 Flutter SDK:
bash
flutter upgrade
- 更新所有依赖:
bash
flutter pub upgrade --major-versions
- 验证所有 Firebase 相关库均更新至 2024 年 11 月 13 日或之后发布的版本
方法二:修改 Podfile 配置
如果无法立即更新库版本,在 ios/Podfile
末尾添加以下配置:
ruby
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == 'BoringSSL-GRPC'
target.source_build_phase.files.each do |file|
if file.settings && file.settings['COMPILER_FLAGS']
flags = file.settings['COMPILER_FLAGS'].split
flags.reject! { |flag| flag == '-GCC_WARN_INHIBIT_ALL_WARNINGS' } # 移除冲突标记
file.settings['COMPILER_FLAGS'] = flags.join(' ')
end
end
end
end
end
关键说明
-GCC_WARN_INHIBIT_ALL_WARNINGS
是 Xcode 16 不再支持的选项- 此修改直接移除了该冲突标记
- 官方已修复此问题 (PR #36904)
辅助修复步骤
步骤 1:清理项目缓存
bash
flutter clean
rm -rf ios/Pods ios/Podfile.lock pubspec.lock
pod cache clean --all
rm -rf ~/Library/Caches/CocoaPods
rm -rf ~/Library/Developer/Xcode/DerivedData
步骤 2:强制重建 iOS 项目
bash
flutter create --platforms=ios . # 重新生成 iOS 目录
cd ios
pod install --repo-update # 强制更新 Pod
步骤 3:调整 Xcode 构建设置
- 在 Xcode 中打开
ios/Runner.xcworkspace
- 选中 Runner 目标 → Build Settings
- 搜索
ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES
- 将其值设置为 YES
其他注意事项
部署目标要求
确保 Podfile 中指定的最低 iOS 版本≥13.0:
ruby
platform :ios, '13.0' # 必须≥13.0
完整 Podfile 示例
ruby
platform :ios, '13.0'
use_frameworks!
target 'Runner' do
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
# 添加以下修复代码
post_install do |installer|
installer.pods_project.targets.each do |target|
# 修复 BoringSSL-GRPC 编译选项
if target.name == 'BoringSSL-GRPC'
target.source_build_phase.files.each do |file|
if file.settings && file.settings['COMPILER_FLAGS']
flags = file.settings['COMPILER_FLAGS'].split
flags.reject! { |flag| flag == '-GCC_WARN_INHIBIT_ALL_WARNINGS' }
file.settings['COMPILER_FLAGS'] = flags.join(' ')
end
end
end
# 设置统一部署目标
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
end
end
end
工具链更新建议
- 升级 CocoaPods:
bash
sudo gem install cocoapods
- 更新 Ruby 环境(通过 Homebrew):
bash
brew install rbenv
rbenv init
结论总结
解决方案 | 适用场景 | 操作复杂度 |
---|---|---|
更新依赖库 | 项目允许版本升级时 | ⭐ |
修改 Podfile | 需要快速修复/无法升级依赖的情况 | ⭐⭐ |
Xcode 设置 | 作为辅助修复手段 | ⭐⭐⭐ |
:::success 最佳实践
- 始终优先更新 Firebase 库到最新版
- 对于遗留项目,采用 Podfile 配置修复
- 每次切换 Xcode 版本后执行 flutter clean :::
如问题仍未解决,建议:
- 检查 gRPC GitHub Issues 获取最新进展
- 在 Flutter 项目中运行
flutter doctor -v
验证环境配置 - 清空 Xcode 缓存:
rm -rf ~/Library/Developer/Xcode/DerivedData/*