Cocoapods 1.12.1搭配ruby-3.2.2的pod

2023-05-11  本文已影响0人  EvenTime

最近升级了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
    

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

上一篇 下一篇

猜你喜欢

热点阅读