更好的iOS项目:如何使用rbenv管理iOS项目的ruby环境
在“更好的iOS项目”系列中,我们介绍了各种工具和环境,这些工具和环境对于更方便,高效地处理iOS项目很有用。
特别提示
对于随后的任何安装,您都不必通过sudo使用root用户权限。 如果您似乎需要,则很可能您之前已经有权限问题,或者您没有正确安装和设置rbenv 。
如何使用rbenv管理iOS项目的ruby环境
我们为什么要这样做?
ruby已用于编程和运行各种iOS开发工具,例如fastlane , cocoapods或xcodeproj 。
macOS预先默认安装了较旧版本的ruby 。
由于系统本身使用ruby ,因此最佳实践是不要弄乱系统ruby,而要使用用户安装(以及最新)的ruby语言版本。
使用ruby版本管理器,您可以同时维护多个不同ruby版本的安装,并根据项目(自动通过.ruby-version文件)确定要使用哪个ruby版本。
本文末尾提供了本文中使用的工具和文件名的词汇表。
我应该使用哪个红宝石环境管理器?
我们在使用rbenv方面有一个流畅的经验,但是使用rvm或chruby应该可以得到类似的结果。
安装和设置rbenv
安装酿造
可以使用brew package manager轻松安装rbenv ,因此请确保已安装并运行它。
使用brew安装rbenv和ruby-build
通过运行安装rbenv (用于管理ruby环境)
brew install rbenv
这还将安装ruby-build工具(用于通过rbenv安装ruby的版本)。
如果要升级,请运行
brew upgrade rbenv ruby-build
为您的外壳设置rbenv
安装完上述工具后,您需要在外壳程序的配置脚本中添加一个设置rbenv的调用。
您可以通过调用来找出正在使用的shell
echo $0
根据结果,您需要更改〜/ .bash_profile (对于bash), 〜/ .zshrc (对于zsh)或外壳程序的相应文件(如果您有其他外壳程序)。
如果文件(例如〜/ .bash_profile )以前不存在,则只需创建它即可。
由于我们使用非常好的Oh-My-ZSH作为外壳,因此可以通过在图形文本编辑器中打开〜/ .zshrc来对其进行编辑,也可以通过在外壳中直接调用来对其进行编辑
nano ~/.zshrc
加
eval "$(rbenv init -)"
到文件末尾并保存,然后退出终端应用程序并重新打开它以确保更改已应用。
rbenv命令
rbenv具有各种命令,运行时应列出这些命令
rbenv help
对于本文而言,对我们而言最重要的是:
rbenv版本
这显示了通过rbenv设置的当前红宝石版本。 默认情况下,它应该显示system 。 它还向您显示负责选择版本的文件的路径。
rbenv版本
这列出了通过rbenv安装的所有ruby版本(以及系统版本)。
rbenv安装
安装特定版本的ruby。
您可以在ruby-lang.org查找ruby的最新版本。
同样, rbenv install -l
向您显示可用于ruby-build的版本列表。 如果缺少版本,请通过运行brew upgrade rbenv ruby-build
。
本地rbenv
这将显示或设置为当前目录及其子目录定义的版本。
rbenv rehash
如果您在安装gem后使用它遇到麻烦,这会变得很方便,因为它会更新rbenv的基础。
调试
如果在通过rbenv使用ruby时遇到问题,并且某些功能无法正常工作,则rbenv which和rbenv whence很有用。
安装自定义红宝石并创建.ruby-version文件
首先安装最新版本,在发布本文时为2.5.1:
rbenv install 2.5.1
有关最新版本,请参见https://www.ruby-lang.org/en/downloads/。
如果已经有一个.ruby版本文件,请运行
rbenv install
没有任何版本参数来安装.ruby-version文件中设置的版本 。
输入您的iOS项目目录并运行
rbenv local 2.5.1
创建一个内容为2.5.1
的.ruby-version文件。
如果已安装版本, rbenv local仅会执行此操作。
重新启动终端(或进入父目录并重新进入目录)后,如果一切正常,运行rbenv version
应该会为您提供2.5.1
版本。
如何使用Bundler
什么是邦德勒?
bundler是ruby的依赖项管理器,因为cocoapods适用于iOS生态系统。
它可以确保安装了已定义的一组依赖关系,其中包含在上次更新依赖关系时使用的确切版本的依赖关系(宝石)。
如何安装捆绑器
对于通过rbenv安装的每个ruby版本,都必须运行一次
gem install bundler
安装依赖项管理器。
Bundler使用哪些文件?
Bundler使用Gemfile定义依赖项 。
定义要安装的gem (可能的版本):
# List of gems used in this project
gem "cocoapods", "~> 1.5"
更新gem(或将它们添加到项目中)时, 将要安装的gem的确切版本被写入名为Gemfile.lock的文件中。
添加和更新宝石
当您还没有Gemfile时 ,可以通过运行创建一个
bundle init
要添加第一个依赖项,您可以运行bundle add
,例如
bundle add fastlane
这会将依赖关系添加到Gemfile并安装新的依赖关系。
跑步
bundle install
解析Gemfile中的依赖关系图,安装依赖关系并将解析后的版本写入Gemfile.lock文件。 如果您手动编辑Gemfile ,这一点很重要。
您现在应该可以运行
bundle exec fastlane
如果一切顺利。
要在项目开发人员之间同步依赖项,将Gemfile和Gemfile.lock都提交到您的项目很重要。
我什么时候需要运行捆绑软件安装和捆绑软件更新?
通常,仅当您确实打算升级gem的版本时,才需要运行bundle update
。
当您签出一个项目并想要构建它时,大多数时候运行bundle install
就足够了。
然后去哪儿?
安装并正确管理项目所需的gems,至少教您的团队如何通过rbenv安装新的ruby版本以及如何通过bundle安装gems。
在“更好的iOS项目”系列的下一篇文章中,我们将介绍rbenv的一些高级功能。 敬请关注!
词汇表
- .ruby-version:一个简单的文件,用于定义要在项目中使用的红宝石版本
- bash:大多数Linux和UNIX系统的默认外壳,请参阅BASH
- 捆绑软件: ruby依赖管理器
- 宝石:红宝石依赖
- Gemfile:定义文件,其中列出了捆绑程序应安装的所有依赖项
- Gemfile.lock:文件,捆绑程序在其中保存所有依赖项及其依赖项的确切版本,在安装过程中已解决
- oh-my-zsh:zsh的配置和脚本的集合
- rbenv:在同一台计算机上管理多个版本的ruby的工具
- ruby-build:安装ruby版本的工具
- 红宝石:一种编程语言
- zsh: Z Shell