新增iOS Share Extension后Flutter编译报Flutter/Flutter.h找不到
问题背景
开发团队迭代Flutter应用时,近期计划新增Share Extension功能,支持iOS用户从应用外部向本应用分享媒体资源。刚添加完Share Extension时应用可正常编译运行,但切换不同Git分支后开始持续出现编译失败问题。
核心报错信息
Writing result bundle at path: /var/folders/m4/2cb6zdx138q5z5x0ljnvmygm0000gn/T/flutter_tools.VWykU0/flutter_ios_build_temp_dirylPO5Z/temporary_xcresult_bundle /Users/jyotiproy/IdeaProjects/krew_app/ios/Runner/Runner-Bridging-Header.h:1:9: note: in file included from /Users/jyotiproy/IdeaProjects/krew_app/ios/Runner/Runner-Bridging-Header.h:1: #import "GeneratedPluginRegistrant.h" ^ /Users/jyotiproy/IdeaProjects/krew_app/ios/Runner/GeneratedPluginRegistrant.h:10:9: error: 'Flutter/Flutter.h' file not found #import <Flutter/Flutter.h> ^ 1 error generated. <unknown>:0: error: failed to emit precompiled header '/Users/jyotiproy/Library/Developer/Xcode/DerivedData/Runner-bgkxbehdnpdmkjfwhnujcqssvqjc/Build/Intermediates.noindex/PrecompiledHeaders/Runner-Bridging-Header-swift_2R9KITIRJQAWU-clang_13QX7MSDXGS1W.pch' for bridging header '/Users/jyotiproy/IdeaProjects/krew_app/ios/Runner/Runner-Bridging-Header.h' /Users/jyotiproy/IdeaProjects/krew_app/ios/Runner/Runner-Bridging-Header.h:1:9: note: in file included from /Users/jyotiproy/IdeaProjects/krew_app/ios/Runner/Runner-Bridging-Header.h:1: #import "GeneratedPluginRegistrant.h" ^ 2 errors generated. error: generate-pch command failed with exit code 1 (use -v to see invocation) note: Using new build system note: Planning note: Build preparation complete note: Building targets in dependency order /Users/jyotiproy/IdeaProjects/krew_app/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 15.4.99. (in target 'TOCropViewController' from project 'Pods') /Users/jyotiproy/IdeaProjects/krew_app/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 15.4.99. (in target 'Reachability' from project 'Pods') /Users/jyotiproy/IdeaProjects/krew_app/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 15.4.99. (in target 'OrderedSet' from project 'Pods') /Users/jyotiproy/IdeaProjects/krew_app/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 15.4.99. (in target 'FMDB' from project 'Pods') /Users/jyotiproy/IdeaProjects/krew_app/ios/Pods/Pods.xcodeproj: warning: The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 15.4.99. (in target 'TOCropViewController-TOCropViewControllerBundle' from project 'Pods') Result bundle written to path: /var/folders/m4/2cb6zdx138q5z5x0ljnvmygm0000gn/T/flutter_tools.VWykU0/flutter_ios_build_temp_dirylPO5Z/temporary_xcresult_bundle Could not build the precompiled application for the device. Error (Xcode): 'Flutter/Flutter.h' file not found /Users/jyotiproy/IdeaProjects/krew_app/ios/Runner/GeneratedPluginRegistrant.h:9:8 Error (Xcode): failed to emit precompiled header '/Users/jyotiproy/Library/Developer/Xcode/DerivedData/Runner-bgkxbehdnpdmkjfwhnujcqssvqjc/Build/Intermediates.noindex/PrecompiledHeaders/Runner-Bridging-Header-swift_2R9KITIRJQAWU-clang_13QX7MSDXGS1W.pch' for bridging header '/Users/jyotiproy/IdeaProjects/krew_app/ios/Runner/Runner-Bridging-Header.h' Error launching application on Krew iPhone.
已尝试操作
- 参考Stack Overflow公开方案排查,包括删除项目ios目录后重新创建项目,该方案首次使用时曾成功修复问题,但错误复现后再次操作无效。
环境信息
- Xcode版本:13.3
- 执行
flutter doctor -v检测无环境异常,输出如下:
❯ flutter doctor -v [✓] Flutter (Channel stable, 3.0.0, on macOS 12.2 21D49 darwin-x64, locale en-GB) • Flutter version 3.0.0 at /Volumes/macOS_Ext/Library/flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision ee4e09cce0 (6 weeks ago), 2022-05-09 16:45:18 -0700 • Engine revision d1b9a6938a • Dart version 2.17.0 • DevTools version 2.12.2 [✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3) • Android SDK at /Volumes/macOS_Ext/Library/Android • Platform android-31, build-tools 30.0.3 • Java binary at: /Library/Java/JavaVirtualMachines/corretto-11.0.13/Contents/Home/bin/java • Java version OpenJDK Runtime Environment Corretto-11.0.13.8.1 (build 11.0.13+8-LTS) • All Android licenses accepted. [✓] Xcode - develop for iOS and macOS (Xcode 13.3) • Xcode at /Applications/Xcode.app/Contents/Developer • CocoaPods version 1.11.2 [✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome [✓] Android Studio (version 2021.2) • Android Studio at /Volumes/macOS_Ext/Applications/Android Studio.app/Contents • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/631-dart • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840) [✓] IntelliJ IDEA Community Edition (version 2022.1.2) • IntelliJ at /Applications/IntelliJ IDEA CE.app • Flutter plugin version 68.1.4 • Dart plugin version 221.5787.37 [✓] VS Code (version 1.68.1) • VS Code at /Applications/Visual Studio Code.app/Contents • Flutter extension version 3.42.0 [✓] Connected device (2 available) • macOS (desktop) • macos • darwin-x64 • macOS 12.2 21D49 darwin-x64 • Chrome (web) • chrome • web-javascript • Google Chrome 102.0.5005.115 [✓] HTTP Host Availability • All required HTTP hosts are available • No issues found!
- 已提供项目Podfile用于问题排查。
问题根因与修复步骤
该报错的核心原因是新增Share Extension target后,CocoaPods未正确为所有target配置Flutter依赖的头文件搜索路径,切换Git分支时本地Pods缓存、Xcode编译缓存和target配置不一致,最终导致编译时找不到Flutter/Flutter.h头文件。按以下步骤操作即可修复:
- 全量清理缓存与残留依赖
在项目根目录依次执行以下命令:
flutter clean cd ios rm -rf Pods Podfile.lock rm -rf ~/Library/Developer/Xcode/DerivedData/*
- 修正Podfile配置
打开ios目录下的Podfile,做两处调整:
- 给新增的Share Extension target添加Flutter构建配置,不要只给Runner target配置。参考结构如下:
target 'Runner' do use_frameworks! use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) end # 替换成你自己的Share Extension实际target名称 target 'ShareExtension' do use_frameworks! use_modular_headers! # 关键:必须给Extension也引入Flutter构建配置 flutter_additional_ios_build_settings(File.dirname(File.realpath(__FILE__))) end
- 在
post_install块中添加统一部署版本配置,解决日志里的iOS部署版本过低警告:
post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) # 新增以下配置,版本号按项目实际需求设置,不得低于9.0 target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0' end end end
- 重新安装依赖
回到项目根目录执行:
cd .. flutter pub get cd ios pod install --repo-update
- 校验Xcode头文件路径配置
用Xcode打开ios/Runner.xcworkspace,分别选中Runner和Share Extension两个target,进入Build Settings > Search Paths > Header Search Paths,确认存在以下两项配置且选择recursive模式:
$(SRCROOT)/Pods/Headers/Public$(FLUTTER_ROOT)/bin/cache/pkg/sky_engine
配置完成后回到项目根目录执行flutter run即可正常编译。
注意:不要反复删除整个ios目录重建,这种操作会丢失Share Extension的所有自定义配置,切换分支出现配置不一致时,优先走上述缓存清理+配置校验流程即可。
内容的提问来源于stack exchange,提问作者jyoti proy
相关产品推荐
相关产品推荐

