最近晋级了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成功的
解决方法
-
最简单的方法,原本应该也是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版别中官方修正了该问题,笔者并没有去尝试 -
卸载当前的
Cocoapods
,运用gem方法装置,该方法能够运用老的ruby
版别,相同能解决该问题,但明显不是我想要的,假如你原本便是这个方法,在没有晋级ruby
到3.2.2的情况下,装置到1.12.1的Cocoapods
版别底子不会发现该问题;假如便是运用的ruby-3.2.2
,能够切到老的ruby版别即可 -
在你项目的根目录下,创建
.ruby-version
和Gemfile
配置文件,
.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
这种方法也是比较引荐的,在多人协作的情况下,为了环境的一致性,通常会运用该方法来配置,而且也不用去修改源码