Skip to content

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_corecloud_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

操作步骤:

  1. 升级 Flutter SDK:
bash
flutter upgrade
  1. 更新所有依赖:
bash
flutter pub upgrade --major-versions
  1. 验证所有 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 构建设置

  1. 在 Xcode 中打开 ios/Runner.xcworkspace
  2. 选中 Runner 目标 → Build Settings
  3. 搜索 ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES
  4. 将其值设置为 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

工具链更新建议

  1. 升级 CocoaPods:
bash
sudo gem install cocoapods
  1. 更新 Ruby 环境(通过 Homebrew):
bash
brew install rbenv
rbenv init

结论总结

解决方案适用场景操作复杂度
更新依赖库项目允许版本升级时
修改 Podfile需要快速修复/无法升级依赖的情况⭐⭐
Xcode 设置作为辅助修复手段⭐⭐⭐

:::success 最佳实践

  1. 始终优先更新 Firebase 库到最新版
  2. 对于遗留项目,采用 Podfile 配置修复
  3. 每次切换 Xcode 版本后执行 flutter clean :::

如问题仍未解决,建议:

  1. 检查 gRPC GitHub Issues 获取最新进展
  2. 在 Flutter 项目中运行 flutter doctor -v 验证环境配置
  3. 清空 Xcode 缓存:rm -rf ~/Library/Developer/Xcode/DerivedData/*