最近晋级了Cocoapods到1.12.1,由于更改了Cocoapods的装置方法,原来是运用sudo gem指令装置的,现如今采用了Homebrew装置管理Cocoapods,毕竟早就不引荐不应该运用sudo gem方法装置了,所以呈现了以下过错,项目是老版别的flutter创建的,由于某些原因,一直没有晋级到更新的flutter版别

[!] Invalid `Podfile` file: undefined method `exists?' for File:Class.
 #  from /Users/tok/Documents/flutter/Gk-Flutter-Demo/ios/Podfile:35
 #  -------------------------------------------
 # 
 >    flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
 #  end
 #  -------------------------------------------

呈现该报错的底子原因是ruby3.2.2中没有了File:Class中没有了exists办法,由于咱们的Cocoapods是用Homebrew装置的,运用指令
brew install cocoapods
这种方法会主动捆绑装置一个现阶段运用较多的版别,也便是装置了一个最新的ruby-3.2.2版别,清楚明了,如此咱们是无法在该工程pod成功的

解决方法

  1. 最简单的方法,原本应该也是flutter SDK兼容的问题,这个问题跟Apple,Cocoapods都没什么关系,所以直接找到了兼容方法,在咱们flutter装置的路径下找到这个ruby文件/packages/flutter_tools/bin/podhelper.rb
    return [] unless File.exists? file_path
    修改成
    return [] unless File.exist? file_path
    即可,也许在更高的flutter版别中官方修正了该问题,笔者并没有去尝试

  2. 卸载当前的Cocoapods,运用gem方法装置,该方法能够运用老的ruby版别,相同能解决该问题,但明显不是我想要的,假如你原本便是这个方法,在没有晋级ruby到3.2.2的情况下,装置到1.12.1的Cocoapods版别底子不会发现该问题;假如便是运用的ruby-3.2.2,能够切到老的ruby版别即可

  3. 在你项目的根目录下,创建.ruby-versionGemfile配置文件,
    .ruby-version:
    3.0.0
    Gemfile:

    source 'https://rubygems.org'
    You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
    ruby File.read(File.join(__dir__, '.ruby-version')).strip
    gem 'cocoapods', '~> 1.12'
    

    装置ruby版别管理

    brew install rbenv ruby-build # install ruby ver. manager
    rbenv init                    # load rbenv in your shell
    # ^^^follow instructions after re-run terminal!!! 
    rbenv install 3.0.0           # install required Ruby version
    

    装置gem

    cd your/rn_project/folder
    rbenv local     # switch to 3.0.0 ruby version
    bundler install # install gem deps
    

    最终pod

    cd ios
    bundler exec pod install
    

    这种方法也是比较引荐的,在多人协作的情况下,为了环境的一致性,通常会运用该方法来配置,而且也不用去修改源码