将Firebase依赖项添加到yaml文件会导致构建失败

时间:2020-07-19 10:26:01

标签: firebase flutter dart

当我在模拟器(Iphone 11 Pro Max)上启动我的项目时,我的应用程序构建完全正常,但是一旦我添加了任何与firebase相关的依赖项,我的构建就会失败。 我尝试添加不同的依赖项,并且它们解决了一个问题,所以我认为这与Firebase有关。

我什至试图制作一个基本的hello world flutter项目,并在其中添加firebase依赖项。

这是错误正在得到:

Running "flutter pub get" in sommerobst_app_beta...                 1.2s
Launching lib/main.dart on iPhone 11 Pro Max in debug mode...
Running pod install...                                              9.7s
Xcode build done.                                            7.3s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **
Xcode's output:
↳
    Undefined symbols for architecture x86_64:
      "_pb_field_iter_begin", referenced from:
          _pb_decode_noinit in pb_decode.o
          _pb_message_set_to_defaults in pb_decode.o
          _pb_release in pb_decode.o
          _iter_from_extension in pb_decode.o
          _pb_encode in pb_encode.o
          _pb_check_proto3_default_value in pb_encode.o
      "_pb_field_iter_find", referenced from:
          _pb_decode_noinit in pb_decode.o
          _pb_release_union_field in pb_decode.o
"_pb_field_iter_next", referenced from:
      _pb_decode_noinit in pb_decode.o
      _find_extension_field in pb_decode.o
      _pb_message_set_to_defaults in pb_decode.o
      _pb_release in pb_decode.o
      _pb_encode in pb_encode.o
      _pb_check_proto3_default_value in pb_encode.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    note: Using new build system
    note: Planning build
    note: Constructing build description
Could not build the application for the simulator.
Error launching application on iPhone 11 Pro Max.
Exited (sigterm)

这是我的Yaml文件:

name: sommerobst_app_beta
description: A new Flutter project.

publish_to: 'none' # Remove this line if you wish to publish to pub.dev

version: 1.0.0+1

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  intl: ^0.16.1

  cupertino_icons: ^0.1.3
  image_picker: ^0.6.7+4
  firebase_core: ^0.4.5


dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:


  uses-material-design: true

  assets:
    - assets/images/placeholder_logo.png
    # - images/a_dot_ham.jpeg

编辑:

这是我的Podfile:

# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

project 'Runner', {
  'Debug' => :debug,
  'Profile' => :release,
  'Release' => :release,
}

def parse_KV_file(file, separator='=')
  file_abs_path = File.expand_path(file)
  if !File.exists? file_abs_path
    return [];
  end
  generated_key_values = {}
  skip_line_start_symbols = ["#", "/"]
  File.foreach(file_abs_path) do |line|
    next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
    plugin = line.split(pattern=separator)
    if plugin.length == 2
      podname = plugin[0].strip()
      path = plugin[1].strip()
      podpath = File.expand_path("#{path}", file_abs_path)
      generated_key_values[podname] = podpath
    else
      puts "Invalid plugin specification: #{line}"
    end
  end
  generated_key_values
end

target 'Runner' do
  use_frameworks!
  use_modular_headers!

  # Flutter Pod

  copied_flutter_dir = File.join(__dir__, 'Flutter')
  copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
  copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
  unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
    # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
    # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
    # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.

    generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
    unless File.exist?(generated_xcode_build_settings_path)
      raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
    end
    generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
    cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];

    unless File.exist?(copied_framework_path)
      FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
    end
    unless File.exist?(copied_podspec_path)
      FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
    end
  end

  # Keep pod path relative so it can be checked into Podfile.lock.
  pod 'Flutter', :path => 'Flutter'

  # Plugin Pods

  # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
  # referring to absolute paths on developers' machines.
  system('rm -rf .symlinks')
  system('mkdir -p .symlinks/plugins')
  plugin_pods = parse_KV_file('../.flutter-plugins')
  plugin_pods.each do |name, path|
    symlink = File.join('.symlinks', 'plugins', name)
    File.symlink(path, symlink)
    pod name, :path => File.join(symlink, 'ios')
  end
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

0 个答案:

没有答案