报错:
[!] Invalid Podfile
file: undefined method `exists?' for class File.
[!] Invalid Podfile
file: undefined method `exists?' for File:Class.
flutter
flutte tools 安装目录下面的
packages/flutter_tools/bin/podhelper.rb
flutter 3.0.5(包含3.0.5)及以下版本都是File.exists?
flutter 3.3.10(包含3.3.10)及以上版本都是File.exist
因此现在已经定位到问题了:
ruby-3.1.2(不包含3.1.2)以上版本的已经将File.exists?方法删除了,所以原来好用的flutter 3.0.5(包含3.0.5)现在不好用了,是因为系统的ruby升级了导致不好用。
那么解决方法有2个:
1、升级flutter版本,即升级到flutter 3.3.10(包含3.3.10) ,新版本的flutter tools已经用File.exist了。
2、降低ruby版本 重新安装ruby 3.1.2或以下版本,并且使用这个版本的ruby重新安装cocoapods
那么因为我们项目目前不能升级flutter,因此使用方法2,降低系统的ruby版本:
推荐使用rbenv管理多个版本的ruby
安装 rbenv
brew install rbenv
安装 ruby-build 插件,方便安装特定版本的 Ruby
brew install ruby-build
将 rbenv 添加到 shell 中
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
查看可用的 Ruby 版本
rbenv install -l
安装某个版本,这里安装 3.1.2
rbenv install 3.1.2
设置全局使用该版本
rbenv global 3.1.2
查看ruby版本
ruby --version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin23]
which ruby
/Users/xx/.rbenv/shims/ruby
查看rbenv ruby版本
rbenv versions
system
2.7.3
- 3.1.2 (set by /Users/xx/.rbenv/version)
安装完成合适的 Ruby 版本后,接下来就可以使用 RubyGems 安装 CocoaPods 了:
更新 gem
gem update --system
安装 CocoaPods
gem install cocoapods
安装依赖项
pod install
通过 rbenv 管理 Ruby 版本,你可以轻松地在不同项目之间切换所需的 Ruby 环境,同时保持 pod 等工具的兼容性。
ok 再次运行 成功了
总结:
File.exists 新版本的ruby已经废弃了不能再使用。3.0.5及以下版本的flutter 仍然用的此exits方法所以报错。
降低ruby版本 (支持exists 和 exist),ruby降低到3.1.2或以下
或者升级flutter版本 (不用exists了) ,flutter升级到3.3.0或以上
都可以解决问题。
所以解决了之前的一个疑惑:
打包flutter产物时候会报错(依赖flutter安装环境flutter_tools下面的podhelper.rb),
而集成时候打包没问题(使用exist,使用集成时的podhelper.rb,并非flutter安装目录下的环境。不依赖flutter安装环境)。
正是因为老版本的ruby (3.1.2以下) 有exists和exist,新版本的ruby直接删除了, 只有exist