CocoaPods版本隔离 - ShenYj/ShenYj.github.io GitHub Wiki

CocoaPods版本隔离

  • 在面对多人协作开发时, 设备间的环境可能会造成不必要的麻烦,比如MacOS自带的ruby版本都不是最新的,可以使用rvmrbenv来控制ruby版本

  • iOS日常开发中很多的工具都是Ruby编写的, 比如: BundlerfastlanejazzyCocoaPods

    这些Ruby工具或者依赖项,都是通过Ruby包管理工具RubyGems来安装管理的,在默认情况下Gems总是下载最新版本, 多环境的版本不一致可能会产生一些问题

  • Bundler是管理Gem依赖的工具,可以隔离不同项目中Gem的版本和依赖环境的差异,同时它也是一个Gem

    Bundler通过读取项目中的依赖描述文件Gemfile,来确定各个Gems的版本号或者范围,来提供了稳定的应用环境。当我们使用bundle install它会生成Gemfile.lock将当前librarys使用的具体版本号写入其中。之后,他人再通过 bundle install 来安装 libaray 时则会读取 Gemfile.lock 中的 librarys、版本信息等。

    RubyGemsRuby 的一个包管理工具,这里面管理着用 Ruby 编写的工具或依赖我们称之为 Gem

使用Bundler来锁定Cocoapods版本

  • 在项目中初始化bundle环境,创建Gemfile

    bundle init
  • Gemfile中声明使用的CocoaPods版本 (这里锁定了1.10.2版本)

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

    执行bundle install开始安装后, 生成Gemfile.lock文件

  • 编辑Podfile后, 开始安装依赖库

    bundle exec pod install

    等待依赖安装成功后

    • 通过项目下的Podfile.lock文件可见当前使用CocoaPods版本为:

      COCOAPODS: 1.10.2

    • 而本机环境中

      ❯ pod --version
      1.11.2

这样我们就可以轻松统一CocoaPods环境了

CocoaPods 其实是 iOS 版的 RubyGems + Bundler 组合

  • Bundler 依据项目中的 Gemfile 文件来管理 Gem
  • CocoaPods 通过 Podfile 来管理 Pod
⚠️ **GitHub.com Fallback** ⚠️