Cocoapods 1.12.1搭配ruby-3.2.2的pod
最近升级了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
这种方式也是比较推荐的,在多人协作的情况下,为了环境的一致性,通常会使用该方式来配置,而且也不用去修改源码