更好的iOS项目:如何使用rbenv管理iOS项目的ruby环境

在“更好的iOS项目”系列中,我们介绍了各种工具和环境,这些工具和环境对于更方便,高效地处理iOS项目很有用。

特别提示

对于随后的任何安装,您都不必通过sudo使用root用户权限。 如果您似乎需要,则很可能您之前已经有权限问题,或者您没有正确安装和设置rbenv

如何使用rbenv管理iOS项目的ruby环境

我们为什么要这样做?

ruby已用于编程和运行各种iOS开发工具,例如fastlanecocoapodsxcodeproj

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 whichrbenv 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

什么是邦德勒?

bundlerruby的依赖项管理器,因为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 

如果一切顺利。

要在项目开发人员之间同步依赖项,将GemfileGemfile.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