Zsh环境下Flutter提示CocoaPods异常,重装Ruby依赖库缺失求助
最近把终端从Bash切换到Zsh后,碰到了个挺烦人的问题:brew doctor明明显示“Your system is ready to brew.”,一切正常,但执行flutter doctor的时候却卡在了Xcode相关的检查上:
[!] Xcode - develop for iOS and macOS (Xcode 12.2)
✗ CocoaPods installed but not working.
提示说CocoaPods虽然装了但没法工作,大概率是安装时用的Ruby版本和现在调用的版本不一致,建议重装CocoaPods。
结果我执行sudo gem install cocoapods的时候直接报错崩了,错误信息是:
dyld: Library not loaded: /usr/local/opt/gmp4/lib/libgmp.3.5.2.dylib
Referenced from: /Users/puser/.rvm/rubies/ruby-2.5.1/bin/ruby
Reason: image not found
zsh: abort sudo gem install cocoapods
查了下当前的路径信息,情况是这样的:
which pod输出:/Users/puser/.rvm/rubies/ruby-2.5.1/bin/podwhich gem输出:gem () { \typeset result ( \typeset rvmrc rvm_rvmrc_files=("/etc/rvmrc" "$HOME/.rvmrc") if [[ -n "${rvm_prefix:-}" ]] && ! [[ "$HOME/.rvmrc" -ef "${rvm_prefix}/.rvmrc" ]] then rvm_rvmrc_files+=("${rvm_prefix}/.rvmrc") fi for rvmrc in "${rvm_rvmrc_files[@]}" do [[ -s "${rvmrc}" ]] && source "${rvmrc}" || true done unset rvm_rvmrc_files command gem "$@" ) || result=$? hash -r return ${result:-0} }which ruby输出:/Users/puser/.rvm/rubies/ruby-2.5.1/bin/ruby
折腾了半天,总结出几个可行的解决方案,你可以挨个试试:
方案1:修复RVM管理的Ruby依赖
这个错误的核心是Ruby 2.5.1依赖的gmp4库找不到了,多半是brew更新或者路径变动导致的。咱们可以让RVM重新编译Ruby来解决:
- 先卸载有问题的Ruby版本:
rvm uninstall 2.5.1 - 重新安装Ruby 2.5.1,让RVM自动处理依赖:
rvm install 2.5.1 - 安装完成后,直接执行
gem install cocoapods(别用sudo!RVM管理的Ruby是用户级的,sudo会调用系统Ruby,反而会出问题)
方案2:切换到其他Ruby版本
如果RVM的Ruby一直闹脾气,不如换个版本试试:
- 临时切换到系统自带Ruby:
rvm use system - 然后用sudo安装CocoaPods:
sudo gem install cocoapods(系统Ruby需要sudo权限) - 要是你用rbenv管理Ruby,也可以装个新的稳定版本:
rbenv install 2.7.6,rbenv global 2.7.6,再执行gem install cocoapods
方案3:检查Zsh的RVM环境变量
刚从Bash切到Zsh,可能RVM的环境变量没加载好。检查下~/.zshrc配置:
- 打开配置文件:
open ~/.zshrc - 看看有没有这一行:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" - 没有的话加上,保存后执行
source ~/.zshrc让配置生效,再试试安装CocoaPods
方案4:用Homebrew安装CocoaPods(最省心)
直接绕开Ruby版本的坑,用brew装CocoaPods:
- 先卸载现有的CocoaPods:
gem uninstall cocoapods - 用brew安装:
brew install cocoapods - 安装完成后执行
pod setup初始化,再跑flutter doctor应该就正常了
内容的提问来源于stack exchange,提问作者Mathias

