Ruby和其生态链

Cocopods 思想其实借鉴了其他语言的PM工具 例如: RubyGems Bundler npm Gradle

Cocopods 通过Ruby语言实现的,本身就是一个Gem包

Ruby和其生态链

参考链接 版本管理工具及 Ruby 工具链环境

RVMrbenv都是管理多个Ruby环境的工具 提供不同版本的Ruby环境管理的切换

RubyGems

RubyGems是Ruby的一个包管理工具 管理着用Ruby写的工具或者依赖,我们称之为Gem

RubyGems还提供了 Ruby 组件的托管服务,可以集中式的查找和安装libraryapps,当我们使用gem install xxx会通过rubygems.org来查询对应的gem packetge。而我们iOS的日常中很多工具都是通过Gem提供的,如:Bundler、fastlane、jazzy、CocoaPods

Bundler

但是在默认情况下,Gems总是下载library的最新版本,无法达到我们的预期,我们
通过Bundler来管理Gem依赖,来隔离不同项目中的Gem版本和依赖环境的差异,其也是一个Gem

通过读取项目中的依赖描述文件Gemfile,来确定各个Gems的版本号或者范围,提供了稳定的应用环境。使用bundle install将具体版本号写入Gemfile.lock

Gemfile

Bundler 依据项目中的 Gemfile 文件来管理 Gem

CocoaPod 类似 iOS版的RubyGems+Bundler组合
Bundler在一个Gem中依赖的其他Gem的版本
CocoaPod在一个iOS项目中管理其依赖的其他项目(Pod)的版本

搭建一套合理的Ruby工具链

  1. 使用 homebrew 安装 rbenv
  2. 使用 rbenv 管理 Ruby 版本
  3. 查询系统级 Gem 依赖
    使用gem list查看当前环境下的所有Gem依赖

使用Bundle来管理项目中的Gem依赖

使用Bundle来锁定项目的Gem环境,来让团队统一Gem中的所有Ruby工具版本。避免文件冲突和不必要的错误

在项目中增加一个Gemfile文件 锁定当前项目的环境依赖

  1. 初始化bundle环境
    其实就是使用bundle init命令初始化一个gemfile文件
  2. 在 Gemfile 中声明使用的 CocoaPods 版本并安装

    在Gemfile中使用DSL编写以下内容

    source "https://rubygems.org"
    git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
    # gem "rails"
    gem "cocoapods", "1.5.3"

    然后使用bundle install进行安装,则指定cocopd版本安装成功 并且还保存了一份Gemfile.lock文件锁存依赖结果

  3. 使用当前环境的CocoaPods版本操作iOS工程

    检查当前环境下的gem列表
    bundle exec gem list 当前环境的Gem列表

    使用bundle exec pod install就可以使用CocoaPods 1.5.3的版本来执行install的pod操作