flutter错误 无效的`Podfile`文件: nil无法隐式转换为字符串。我已经在讨论中搜索过,但我似乎无法解决这个问题。

13 浏览
0 Comments

flutter错误 无效的`Podfile`文件: nil无法隐式转换为字符串。我已经在讨论中搜索过,但我似乎无法解决这个问题。

这是我收到的错误。

我尝试了flutter clean并更改了一些行的语法,但我对dart和flutter还是很陌生,所以不太确定。我也重新安装了cocoapods和ruby,但是我收到了相同的错误。我还确保将ruby更新到了最新版本。

 [!] 无效的`Podfile`文件:无法将nil隐式转换为String。
         #  来自 /Users/(name)/Downloads/Projects/doctor_consultation_app/ios/Podfile:57
         #  -------------------------------------------
         #      unless File.exist?(copied_framework_path)
         >        FileUtils.cp(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
         #      end
         #  -------------------------------------------

这是我的pod文件。

# 取消注释此行以为您的项目定义全局平台
# platform :ios, '9.0'
# CocoaPods分析以同步方式发送网络统计数据,影响flutter构建延迟。
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 "无效的插件规范:#{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)
    # 将Flutter.framework和Flutter.podspec复制到Flutter/,以便在xcode后端脚本尚未运行时有东西进行链接。
    # 该脚本将根据当前选择的Xcode配置复制正确的调试/配置/发布版本的框架。
    # 如果dylib不存在,CocoaPods在pod install之前(在任何构建阶段生成之前)将不会嵌入框架。
    generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
    unless File.exist?(generated_xcode_build_settings_path)
      raise "Generated.xcconfig必须存在。如果您手动运行pod install,请确保首先执行flutter pub get"
    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
  # 保持pod路径相对,以便可以将其检入Podfile.lock。
  pod 'Flutter', :path => 'Flutter'
  # 插件Pods
  # 准备符号链接文件夹。我们使用符号链接来避免Podfile.lock引用开发人员机器上的绝对路径。
  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
0 Comments

问题的原因是`Podfile`文件中存在空值(nil)无法转换为字符串的错误。解决方法是将Flutter的channel切换到stable并执行`flutter upgrade`命令。具体步骤如下:

1. 打开命令行工具,执行以下命令将Flutter的channel切换到stable:

   flutter channel stable
   

2. 执行以下命令来升级Flutter:

flutter upgrade

执行完以上两个步骤后,问题应该就会得到解决。

0
0 Comments

问题原因:当将Flutter SDK更新为新的Flutter 2.0版本时,但项目是使用旧版本的Flutter SDK(1.22)创建的,会出现这个错误。

解决方法:通过删除ios文件夹中的Podfile和Podfile.lock文件,然后运行以下命令来解决问题:

flutter run

或者

flutter build ios

这样Flutter将为Flutter 2.0生成新的Podfile。

可能需要取消注释"platform :ios, '9.0'"以成功构建项目。

0
0 Comments

问题原因:在更新Mac操作系统为BigSur并使用Ruby后,出现了这个问题。

解决方法:通过执行命令rm -rf iosflutter create .解决。然后修复新的ios文件中的一些更改。

警告:如果在现有应用程序上使用此方法,它将删除您的iOS文件夹,但您可能在其中有一些自定义设置。因此,您应该将您的提交添加到新文件中。请不要在现有应用程序上使用此方法,这会删除我的iOS文件夹,并且flutter create命令将创建一个新项目。幸运的是,我使用了git,并且可以回滚到我的提交。

对于现有应用程序,您需要在解决方案中添加“警告”文本。

您需要在脚本中设置项目路径,您还可以指定要创建的平台,例如flutter create --platforms=ios [PROJECT_PATH]。将[PROJECT_PATH]替换为Flutter项目的实际路径。

0