如何在 macOS 上同时使用 Ruby2、Ruby3、CocoaPods、Flutter2 和 Flutter3,使用 RVM 和 FVM 进行版本管理
视频
前言
猫哥主打系统环境是:
- macos
- flutter 3.7.12
- ruby 3.2.2
- cocoapods 1.12.1
- xcode 14.3.1
这套配置运行最新的项目没问题,但是最近需要维护 flutter 2.10.5 这种老项目,虽然用了 fvm 进行 flutter 版本切换,但是 flutter 2.10.5 用的 ruby 2 ,我当前是 ruby 3 所以运行 pod install 的时候就报错了。
[!] Invalid `Podfile` file: undefined method `exists?' for File:Class.
# from /Users/ducafecat/Documents/project-2021/helber_v2/helber_v2_flutter_210/ios/Podfile:34
# -------------------------------------------
#
> flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
#
# -------------------------------------------
这个错误很常见,因为 ruby 3 的 api 接口有变化。
今天就来说说我是怎么解决的,我是需要灵活切换旧版、新版的 IOS 开发环境。
原文 https://ducafecat.com/blog/011-flutter-macos-rvm-cocoapods-fvm
参考
https://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/
https://www.moncefbelyamani.com/why-you-should-never-use-sudo-to-install-ruby-gems/
https://blog.driftingruby.com/articles/2023/03/04/ruby-with-yjit.html
rvm 知识点
RVM(Ruby Version Manager)是一个用于管理 Ruby 版本的工具,它可以让您在同一台机器上安装和使用多个 Ruby 版本,并且可以为每个 Ruby 版本提供独立的 gem 环境。以下是 RVM 的一些优点:
- 多版本管理:使用 RVM,您可以轻松地在同一台机器上安装和管理多个 Ruby 版本。这对于开发人员来说非常有用,因为不同的项目可能需要不同的 Ruby 版本或 gem 包。
- gem 环境隔离:RVM 可以为每个 Ruby 版本提供独立的 gem 环境,以避免不同版本之间的 gem 包冲突。这意味着您可以在不同的 gem 环境中安装和管理 gem 包,而不会相互干扰。
- 简单易用:RVM 提供了一组简单易用的命令,使您可以轻松地安装、卸载、切换和管理 Ruby 版本、gem 包和 gemset。
- 社区支持:RVM 是一个流行的 Ruby 工具,拥有活跃的社区支持和开发团队,可以及时解决问题和更新版本。
- 跨平台支持:RVM 支持多种操作系统,包括 macOS、Linux 和 Windows,使您可以在不同的平台上使用相同的工具和环境。
思路
我尝试了些方法,过程如下:
- 删除本机各种 ruby cocoapods 工具
- 安装最新版 ruby 3.2.2
- 安装最新版 cocoapods
- 安装 rvm ruby 版本切换工具
- 通过 rvm 安装 ruby 2.7.8
- 切换 ruby 2.7.8 安装 cocoapods
- 完成后 rvm 可以切换回系统 ruby 3.2.2 版本
步骤
注意以下操作竟可能不要用 sudo
执行,否则权限会乱掉。
第一步:准备环境
卸载旧版 ruby 2 和 ruby 版本工具(rvm rbenv asdf frum)
安装 homebrew
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew 升级到最新
$ brew update && brew doctor
检查自己的系统芯片 arm64 x86_64
$ uname -m
清理错误的配置,有些包管理工具会写下面的配置文件
~/.zshrc
~/.zprofile
~/.zlogin
~/.bash_profile
~/.profile
~/.bashrc
~/.config/fish/config.fish
主要是
.zshrc
.bash_profile
.profile
第二步:安装 ruby 最新版
安装 ruby 3.2.2
$ brew install ruby
配置 ruby 环境
$ vi ~/.bash_profile
# ruyb
# intel 芯片
if [ -d "/usr/local/opt/ruby/bin" ]; then
export PATH=/usr/local/opt/ruby/bin:$PATH
export LDFLAGS="-L/usr/local/opt/ruby/lib"
export CPPFLAGS="-I/usr/local/opt/ruby/include"
export PATH=`gem environment gemdir`/bin:$PATH
fi
# m1 silicon 芯片
if [ -d "/opt/homebrew/opt/ruby/bin" ]; then
export PATH=/opt/homebrew/opt/ruby/bin:$PATH
export LDFLAGS="-L/opt/homebrew/opt/ruby/lib"
export CPPFLAGS="-I/opt/homebrew/opt/ruby/include"
export PATH=`gem environment gemdir`/bin:$PATH
fi
查看版本
$ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-darwin22]
安装 cocoapods
$ gem install cocoapods
第三步:安装 rvm 版本管理
安装 rvm
$ curl -sSL https://get.rvm.io | bash -s stable
rvm 查看可安装版本
$ rvm list known
安装 ruby 2.7.8
$ rvm install ruby-2.7.8 --default
rvm 切换版本
$ rvm use ruby-2.7.8
安装 cocoapods
$ gem install cocoapods
rvm 会自动管理 gem 不同 ruby 版本的隔离
使用
切换 flutter 2.10.5
fvm 切到 2.10.5
$ fvm global 2.10.5
rvm 切到 ruby 2.7.8
$ rvm use ruby-2.7.8
cocoapods 拉包
$ cd ios
$ pod install
切换 flutter 3.7.12
rvm 还原系统
$ rvm reset
fvm 切到 3.7.12
$ fvm global 3.7.12
cocoapods 拉包
$ cd ios
$ pod install
小结
大家可以看到现在可以顺利的切换 flutter 2&3 的开发环境了,如果你有和我相同需求的,可以动手试试。
感谢阅读本文
如果我有什么错?请在评论中让我知道。我很乐意改进。
© 猫哥 ducafecat.com
end