Flutter构建macOS应用时大量警告导致发布构建失败
Flutter macOS发布构建因大量警告失败的解决方案
问题背景
本地运行Flutter macOS应用时仅出现少量警告,可正常启动;但执行发布构建时警告数量激增,导致构建中断。警告主要分为两类:
- abseil库中
__has_trivial_copy废弃API警告 - Pods中多个目标的"Create Symlinks to Header Folders"脚本阶段警告
部分警告内容:
In file included from /Users/andreimac/Developer/FlutterApp/mac_menu/build/macos/Build/Products/Debug/abseil/absl.framework/Headers/status/internal/status_internal.h:22: In file included from /Users/andreimac/Developer/FlutterApp/mac_menu/build/macos/Build/Products/Debug/abseil/absl.framework/Headers/strings/cord.h:75: return bit_cast<int16_t>(FromHost16(bit_cast<uint16_t>(x))); ^ /Users/andreimac/Developer/FlutterApp/mac_menu/build/macos/Build/Products/Debug/abseil/absl.framework/Headers/meta/type_traits.h:559:8: warning: builtin __has_trivial_copy is deprecated; use __is_trivially_copyable instead [-Wdeprecated-builtins] (__has_trivial_copy(ExtentsRemoved) || !kIsCopyOrMoveConstructible) && ^ warning: Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'abseil' from project 'Pods')
解决步骤
1. 升级依赖库(优先方案)
这些警告大多是依赖的abseil、gRPC库使用了废弃API导致,升级Flutter到最新稳定版,或更新相关依赖通常能解决:
- 执行
flutter upgrade升级Flutter到最新稳定版本 - 删除项目根目录的
Podfile.lock和macOS下的Pods文件夹 - 进入
macos目录执行pod install - 重新执行发布构建:
flutter build macos --release
2. 禁用特定编译警告(临时方案)
如果暂时无法升级依赖,可通过修改macos/Podfile添加post_install脚本,针对性关闭警告:
post_install do |installer| installer.pods_project.targets.each do |target| # 关闭废弃API警告 if ['abseil', 'gRPC-C++', 'gRPC-Core', 'BoringSSL-GRPC'].include?(target.name) target.build_configurations.each do |config| config.build_settings['WARNING_CFLAGS'] ||= [] config.build_settings['WARNING_CFLAGS'] << '-Wno-deprecated-builtins' end end # 修复脚本阶段警告 target.script_phases.each do |phase| if phase.name == 'Create Symlinks to Header Folders' phase.based_on_dependency_analysis = false end end end end
修改后执行pod install,再重新构建。
3. 清理构建缓存
执行以下命令清理缓存,避免旧文件干扰:
flutter clean rm -rf macos/build rm -rf macos/Pods rm macos/Podfile.lock flutter pub get cd macos && pod install
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

