在iOS开发过程中,在使用Pod或者Fastlane
自动化插件配置的时候都要安装ruby
环境,由于Mac自带一套ruby
环境,所以理论上可以直接拿来进行使用。但是在使用过程中,总会报权限的问题,比如:
Error loading plugin 'fastlane-plugin-fir_cli':
You don't have write permissions for the /usr/bin directory.
# You don't have write permissions for the /Library/Ruby/Gems/2.3.0
directory. (mac user)
......
类似的这样的权限问题,弄得一头雾水,所以这里特意理了一下相关的逻辑内容。因为ruby环境系统自带,所以Mac系统为了保证自身环境的问题,对权限进行了限制,最终导致一般用户无法对系统的ruby环境相关的文件读写内容。所以解决点也就在这了。
原理:再次安装一套ruby
环境供普通用户使用,系统继续用自己的ruby
环境,用户使用自己的一套ruby
环境,这样互不干扰
所以大体也就分成三步了:
- 安装针对于用户所使用的
ruby
环境 - 导入新的
ruby
环境的环境变量 - 查看是否
ruby
环境是否安装成功
在进行安装之前,我们通过以下命令进行排查,查看当前的ruby环境是否是用的系统自带的环境
which ruby
如果ruby
使用的路径如下,那么此时就是用的系统自带的ruby环境了
/usr/bin
安装ruby环境
推荐使用homebrew
安装ruby环境,如果没有安装
homebrew`,可以通过以下命令安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
假定已经安装了homebrew
环境了,使用以下命令进行ruby的安装
brew install ruby
当ruby安装完成之后,会提醒你将ruby的路径导入到环境变量中,如下提示:
==> Reinstalling ruby
==> Downloading https://homebrew.bintray.com/bottles/ruby-2.7.1_2.catalina.bottle.tar.gz
Already downloaded: /Users/lichenchen/Library/Caches/Homebrew/downloads/1a9255e83b1fb1738532e9156b16bc750b493bbef40486552db5f7fa5b8ff08d--ruby-2.7.1_2.catalina.bottle.tar.gz
==> Pouring ruby-2.7.1_2.catalina.bottle.tar.gz
==> Caveats
By default, binaries installed by gem will be placed into:
/usr/local/lib/ruby/gems/2.7.0/bin
You may want to add this to your PATH.
ruby is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
If you need to have ruby first in your PATH run:
echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc
For compilers to find ruby you may need to set:
export LDFLAGS="-L/usr/local/opt/ruby/lib"
export CPPFLAGS="-I/usr/local/opt/ruby/include"
这里,我们按照提示,直接导入到环境变量就好了,执行以下命令:
echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc
export LDFLAGS="-L/usr/local/opt/ruby/lib"
export CPPFLAGS="-I/usr/local/opt/ruby/include"
source ~/.zshrc
最后我们再使用which
命令看一下当前的ruby
使用的是哪个路径下的ruby
。
which ruby
#变成如下的路径就替换了我们自己所安装的ruby了
/usr/local/opt/ruby/bin/ruby
至此,系统中就有了两套ruby
环境,我们使用的时候用我们自己安装的一套就好了,也就从根本上解决了权限的问题。