How to switch cocoapod version


The way I usually introduce Bundler to iOS developers is “like CocoaPods, but for Ruby”. This is correct but a bit unfair, as it is actually CocoaPods which took inspiratino by Bundler, not vice versa.

Bundler lets you specify your dependencies into a Gemfile, it installs or update them for you, and finally makes sure that the executables your are calling are actually the ones specified for the project.

Bundler is a Ruby tool itself, so you can install it like this:

gem install bundler

Once installed you can setup your project to use Bundler with this command from the root of your project:

bundle init

This will generate a template Gemfile. Like a Podfile, a Gemfile is actually a Ruby file in which you can use a special DSL to specify which dependencies you are using, and their version.

This is how a Gemfile for an iOS project might look like:

source ""

gem 'cocoapods', '1.0.0.beta.3'
gem 'fastlane', '~> 1.57.0'

The string after the gem names informs Bundler on the version requirement. In our case CocoaPods should be exactly at version 1.0.0.beta.3, while Fastlane latest version that is greater or equal than 1.57.0, but less that 1.58.0.

Fun fact: Bundler and CocoaPods share the same dependency resolution library, molinillo.

To install your dependencies simply run:

bundle install

Bundle Exec

Installing the right version of a given tool is only the start, actually using the tool is what matters.

I can sometimes happen to be working on different projects at the same time which are using different versions of a tool. Sometimes is not wise to always use the latest version on all the projects, for example and older project might be structured in an incompatible way.

Rather than going down the rabbit hole of updating or downgrading everything, you can rely on Bundler to make sure you are actually using your tools in the version specified in the Gemfile. This can be done by calling them through Bundler via bundle exec, for example:

bundle exec pod install

hat’s quite verbose, so I’d recommend to use an alias) for that. Mine is be, I actually have two special aliases for CocoaPods and Fastlane, bp and bf.