2024-08-19[!] Invalid `Podfile`

2024-08-18  本文已影响0人  我是小胡胡123

报错:
[!] 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

image.png

flutter 3.0.5(包含3.0.5)及以下版本都是File.exists?
flutter 3.3.10(包含3.3.10)及以上版本都是File.exist

image.png image.png

因此现在已经定位到问题了:

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

安装完成合适的 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

上一篇 下一篇

猜你喜欢

热点阅读