Ruby和其生态链
Cocopods 思想其实借鉴了其他语言的PM工具 例如: RubyGems
Bundler
npm
Gradle
Cocopods 通过Ruby语言实现的,本身就是一个Gem包
Ruby和其生态链
参考链接 版本管理工具及 Ruby 工具链环境
RVM
和rbenv
都是管理多个Ruby环境的工具 提供不同版本的Ruby环境管理的切换
RubyGems
RubyGems
是Ruby的一个包管理工具 管理着用Ruby写的工具或者依赖,我们称之为Gem
RubyGems
还提供了 Ruby 组件的托管服务,可以集中式的查找和安装library
和apps
,当我们使用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工具链
- 使用 homebrew 安装 rbenv
- 使用 rbenv 管理 Ruby 版本
- 查询系统级 Gem 依赖
使用gem list
查看当前环境下的所有Gem依赖
使用Bundle来管理项目中的Gem依赖
使用Bundle来锁定项目的Gem环境,来让团队统一Gem中的所有Ruby工具版本。避免文件冲突和不必要的错误
在项目中增加一个Gemfile
文件 锁定当前项目的环境依赖
- 初始化bundle环境
其实就是使用bundle init
命令初始化一个gemfile文件 在 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
文件锁存依赖结果使用当前环境的CocoaPods版本操作iOS工程
检查当前环境下的gem列表
bundle exec gem list
当前环境的Gem列表使用
bundle exec pod install
就可以使用CocoaPods 1.5.3
的版本来执行install的pod操作