React Native中依赖Gem的Gemfile.lock的Bundler版本更新问题求助
解决嵌套Gem依赖的Bundler版本冲突与json安装错误问题
问题核心
你遇到的是嵌套Gem依赖的Bundler版本不兼容,以及旧版本json (1.8.2)在Ruby 3.1.0下无法安装的问题——json 1.8.2不支持Ruby 3.x版本,而旧版cocoapods(0.36.3)依赖的activesupport 4.2.1又绑定了这个旧json版本。
解决方案步骤
1. 禁止手动修改嵌套Gem的Gemfile.lock
嵌套Gem的Gemfile.lock是该Gem发布时锁定的依赖,手动修改极易引发连锁兼容问题,正确的做法是通过隔离或升级依赖来解决。
2. 用Bundler隔离项目依赖环境(推荐)
指定项目级依赖安装路径,避免全局Gem干扰,同时统一项目使用的Bundler版本:
# 卸载全局旧版Bundler(可选) gem uninstall bundler -v 1.17.3 # 用项目指定的Bundler版本安装本地依赖 bundle _2.4.13_ install --path vendor/bundle
所有依赖会安装到项目本地的vendor/bundle目录,彻底和全局嵌套Gem环境隔离。
3. 升级cocoapods版本(根本解决)
cocoapods 0.36.3是2015年的老旧版本,完全不兼容Ruby 3.x,必须升级到兼容版本:
# 移除旧版cocoapods gem uninstall cocoapods -v 0.36.3 # 安装支持Ruby 3.x的新版本(推荐1.11+) gem install cocoapods -v 1.11.3 # 修改项目Gemfile,指定新版本cocoapods # 打开Gemfile,修改为:gem 'cocoapods', '~> 1.11.3' # 执行更新 bundle update cocoapods
升级后,activesupport会自动更新到兼容Ruby 3.x的版本,json安装错误也会随之消失。
4. 临时兼容方案(仅应急,不推荐)
如果暂时无法升级cocoapods,可给json 1.8.2打Ruby 3.x兼容补丁:
# 安装补丁工具 gem install specific_install # 安装带Ruby 3补丁的json 1.8.2 gem specific_install https://github.com/flori/json.git -b v1.8.2-ruby3
此方法仅为临时 workaround,长期来看升级cocoapods才是稳妥方案。
关键提醒
- React Native iOS端依赖cocoapods,务必保持cocoapods版本与Ruby版本兼容:Ruby 3.x对应cocoapods 1.10+版本。
- 所有依赖调整都应通过项目自身的Gemfile和bundle命令管理,不要触碰嵌套Gem的配置文件。
内容的提问来源于stack exchange,提问作者Milan Aggarwal
相关产品推荐
相关产品推荐

