致命错误:管道中未找到“Flutter/Flutter.h”文件

时间:2021-06-17 07:38:13

标签: ios flutter azure-pipelines

我正在尝试在 Azure DevOps 上为我的 Flutter 项目设置构建管道。 android 版本有效,但 iOS 版本给出了“致命错误:'Flutter/Flutter.h' 文件未找到”。

这是我的管道:

trigger:
  - develop

pool:
  vmImage: 'macOS-10.15'

steps:
  - task: FlutterInstall@0
    displayName: Install Flutter $(FLUTTER_VERSION)
    inputs:
      channel: 'stable'
      version: 'custom'
      customVersion: $(FLUTTER_VERSION)
  - task: InstallAppleCertificate@2
    displayName: Install Apple Certificate
    inputs:
      certSecureFile: $(APPLE_CERTIFICATE_FILE)
      certPwd: '$(APPLE_CERTIFICATE_PASSWORD)'
      keychain: 'temp'
  - task: InstallAppleProvisioningProfile@1
    displayName: Install Apple Provisioning Profile
    inputs:
      provisioningProfileLocation: 'secureFiles'
      provProfileSecureFile: $(APPLE_PROVISIONINGPROFILE_FILE)
  - bash: |
      set -e ; set -o pipefail
      $(FlutterToolPath)/flutter clean
      $(FlutterToolPath)/flutter pub get
      
      ##################################
      cd ios
      pod install
      xcodebuild -workspace Runner.xcworkspace -scheme dev -destination 'generic/platform=iOS'
      cd ..
      ##################################

      $(FlutterToolPath)/flutter build ios --flavor dev -t lib/main.dart --no-sound-null-safety # build breaks here
      $(FlutterToolPath)/flutter build apk --flavor dev -t lib/main.dart --no-sound-null-safety

这里的 FLUTTER_VERSION2.0.5,证书和配置文件来自 Azure Pipelines 库。都找到了,安装步骤也正常。

一切正常,直到 flutter build ios,这给出了上述错误。不久前我在 MacBook Pro 上遇到了同样的问题,我通过使用 XCode 打开 ios 项目并运行 Product => Build 来修复它,添加了包含在哈希中的行来模仿该行为,但我不是100% 确定它们是正确的。

我尝试了什么:

  • 我尝试添加用哈希括起来的行,试图模仿“产品 => 构建”XCode 功能,该功能不久前在我的 MacBook Pro 上解决了这个问题。但这不起作用,构建正常,但 flutter build 命令失败并出现相同的错误。
  • 我尝试了 the solution proposed in the answer to this question,但它不适用于我的场景,因为这些文件没有推送到存储库,因此它们实际上并不存在
  • 我尝试了 the solution proposed in the answer to this question,但同样,此文件在存储库中不存在。

奇怪的是,在 MacBook Pro 上我曾经遇到过这个问题,我使用“产品 => 构建”功能解决了它。我可以轻松地在我的 MacBook 上构建 iOS 包,所以我想我的 MacBook 中可能有一些配置在隔离的管道环境中找不到 flutter/xcode。

日志的相关部分:

CompileC /Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/Objects-normal/armv7/FLTFirebaseCrashlyticsPlugin.o /Users/runner/hostedtoolcache/Flutter/2.0.5-stable/macos/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_crashlytics-0.4.0+1/ios/Classes/FLTFirebaseCrashlyticsPlugin.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler (in target 'firebase_crashlytics' from project 'Pods')
    cd /Users/runner/work/1/s/ios/Pods
    export LANG\=en_US.US-ASCII
    /Applications/Xcode_12.4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -target armv7-apple-ios10.0 -fmessage-length\=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit\=0 -std\=gnu11 -fobjc-arc -fmodules -gmodules -fmodules-cache-path\=/Users/runner/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -fmodules-prune-interval\=86400 -fmodules-prune-after\=345600 -fbuild-session-file\=/Users/runner/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/Session.modulevalidation -fmodules-validate-once-per-build-session -Wnon-modular-include-in-framework-module -Werror\=non-modular-include-in-framework-module -fmodule-name\=firebase_crashlytics -Wno-trigraphs -fpascal-strings -O0 -fno-common -Wno-missing-field-initializers -Wno-missing-prototypes -Werror\=return-type -Wdocumentation -Wunreachable-code -Wno-implicit-atomic-properties -Werror\=deprecated-objc-isa-usage -Wno-objc-interface-ivars -Werror\=objc-root-class -Wno-arc-repeated-use-of-weak -Wimplicit-retain-self -Wduplicate-method-match -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wshorten-64-to-32 -Wpointer-sign -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wundeclared-selector -Wdeprecated-implementations -DPOD_CONFIGURATION_DEBUG_DEV\=1 -DDEBUG\=1 -DCOCOAPODS\=1 -DLIBRARY_VERSION\=@\"0.4.0-1\" -DLIBRARY_NAME\=@\"flutter-fire-cls\" -DPERMISSION_EVENTS\=0 -DPERMISSION_REMINDERS\=0 -DPERMISSION_CONTACTS\=0 -DPERMISSION_MICROPHONE\=0 -DPERMISSION_SPEECH_RECOGNIZER\=0 -DPERMISSION_PHOTOS\=0 -DPERMISSION_LOCATION\=0 -DPERMISSION_NOTIFICATIONS\=0 -DPERMISSION_MEDIA_LIBRARY\=0 -DPERMISSION_SENSORS\=0 -DOBJC_OLD_DISPATCH_PROTOTYPES\=0 -isysroot /Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.4.sdk -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -g -Wno-sign-conversion -Winfinite-recursion -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wno-semicolon-before-method-body -Wunguarded-availability -fembed-bitcode-marker -index-store-path /Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Index/DataStore -iquote /Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/firebase_crashlytics-generated-files.hmap -I/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/firebase_crashlytics-own-target-headers.hmap -I/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/firebase_crashlytics-all-non-framework-target-headers.hmap -ivfsoverlay /Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/all-product-headers.yaml -iquote /Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/firebase_crashlytics-project-headers.hmap -I/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/firebase_crashlytics/include -I/Users/runner/work/1/s/ios/Pods/Headers/Public -I/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/DerivedSources-normal/armv7 -I/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/DerivedSources/armv7 -I/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/DerivedSources -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/firebase_crashlytics -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/FirebaseCore -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/FirebaseCoreDiagnostics -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/FirebaseCrashlytics -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/FirebaseDynamicLinks -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/FirebaseInstallations -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/FirebaseInstanceID -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/FirebaseMessaging -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/GoogleDataTransport -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/GoogleUtilities -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/PromisesObjC -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/firebase_core -F/Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Products/Debug-dev-iphoneos/nanopb -F/Users/runner/work/1/s/ios/Pods/FirebaseAnalytics/Frameworks -F/Users/runner/work/1/s/ios/Pods/GoogleAppMeasurement/Frameworks -include /Users/runner/work/1/s/ios/Pods/Target\ Support\ Files/firebase_crashlytics/firebase_crashlytics-prefix.pch -MMD -MT dependencies -MF /Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/Objects-normal/armv7/FLTFirebaseCrashlyticsPlugin.d --serialize-diagnostics /Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/Objects-normal/armv7/FLTFirebaseCrashlyticsPlugin.dia -c /Users/runner/hostedtoolcache/Flutter/2.0.5-stable/macos/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_crashlytics-0.4.0+1/ios/Classes/FLTFirebaseCrashlyticsPlugin.m -o /Users/runner/Library/Developer/Xcode/DerivedData/Runner-gsjhxdjmxuzkkbgjdidjocbaqrkc/Build/Intermediates.noindex/Pods.build/Debug-dev-iphoneos/firebase_crashlytics.build/Objects-normal/armv7/FLTFirebaseCrashlyticsPlugin.o
In file included from /Users/runner/hostedtoolcache/Flutter/2.0.5-stable/macos/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_crashlytics-0.4.0+1/ios/Classes/FLTFirebaseCrashlyticsPlugin.m:5:
/Users/runner/hostedtoolcache/Flutter/2.0.5-stable/macos/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_crashlytics-0.4.0+1/ios/Classes/FLTFirebaseCrashlyticsPlugin.h:8:9: fatal error: 'Flutter/Flutter.h' file not found
#import <Flutter/Flutter.h>
        ^~~~~~~~~~~~~~~~~~~
While building module 'firebase_core' imported from /Users/runner/hostedtoolcache/Flutter/2.0.5-stable/macos/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_crashlytics-0.4.0+1/ios/Classes/FLTFirebaseCrashlyticsPlugin.h:12:
In file included from <module-includes>:1:
In file included from /Users/runner/work/1/s/ios/Pods/Target Support Files/firebase_core/firebase_core-umbrella.h:13:
/Users/runner/hostedtoolcache/Flutter/2.0.5-stable/macos/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.7.0/ios/Classes/FLTFirebaseCorePlugin.h:8:9: fatal error: 'Flutter/Flutter.h' file not found
#import <Flutter/Flutter.h>
        ^~~~~~~~~~~~~~~~~~~
1 error generated.
2 errors generated.

有什么线索吗?

1 个答案:

答案 0 :(得分:0)

经过几个小时的反复试验,我终于解决了这个问题。结果我不得不做两件事:

  • 在管道的开头运行 flutter version
  • 在为 iOS 构建之前,将 Flutter 的 bin 目录放在系统 PATH 中。

老实说,我不知道背后发生了什么魔法,但我怀疑 flutter version 在内部检查是否所有库和二进制文件都已正确下载并静默修复此问题,同时更新 PATH 变量会导致抖动/xcodebuild 找到所需文件的正确路径。不过我不确定。

这是更新后的管道:

trigger:
  - develop

pool:
  vmImage: 'macOS-10.15'

steps:
  - task: FlutterInstall@0
    displayName: Install Flutter $(FLUTTER_VERSION)
    inputs:
      channel: 'stable'
      version: 'custom'
      customVersion: $(FLUTTER_VERSION)
  - task: InstallAppleCertificate@2
    displayName: Install Apple Certificate
    inputs:
      certSecureFile: $(APPLE_CERTIFICATE_FILE)
      certPwd: '$(APPLE_CERTIFICATE_PASSWORD)'
      keychain: 'temp'
  - task: InstallAppleProvisioningProfile@1
    displayName: Install Apple Provisioning Profile
    inputs:
      provisioningProfileLocation: 'secureFiles'
      provProfileSecureFile: $(APPLE_PROVISIONINGPROFILE_FILE)
  - bash: |
      set -e ; set -o pipefail
      $(FlutterToolPath)/flutter --version
      export PATH=$PATH:$(FlutterToolPath)
      $(FlutterToolPath)/flutter clean
      $(FlutterToolPath)/flutter pub get
      $(FlutterToolPath)/flutter build ios --flavor dev -t lib/main.dart --no-sound-null-safety
      $(FlutterToolPath)/flutter build apk --flavor dev -t lib/main.dart --no-sound-null-safety