bundler
rbenv
CocoaPods

bundler で cocoapods そのもののバージョン管理をする

More than 1 year has passed since last update.

iOS開発で各種プラグインを管理するために、cocoapodsを利用していると思いますが
cocoapods自体のバージョンが変わってしまうとPodsファイルの挙動も変わってしまうので
できるだけプロジェクトと一緒に管理できたほうがメリットが多いです。

そこでcocoapodsをみんな同じ状態でつかえるように
cocoapodsのバージョン管理に関してまとめました。

rbenvとbundlerをインストール

まずは rbenvbundler をインストールします。

cocoapods は rubyのgemと呼ばれるものの1つのため
rubyのバージョン管理・切り替えが行える rbenv
gemのローカル管理ができる bundler をインストールします。

こちらに関しては下記のページにまとまっていますので
そちらを見ながらbundlerのインストールまで
進めていただければと思います。

MacにHomeBrew,rbenv,bundlerをインストールする - Qiita

NOTE:
今回 rbenv を推奨しているのは、Rubyのバージョンを固定するためなので
RVM やほかのものでバージョン固定していただければ他の方法でも問題ありません。

bundlerでcocoapodsのセットアップ

bundlerのインストール確認

bundlerが入っているかを確かめます。
ターミナルで以下のコマンドを打ってください。
bundlerが入っていれば、バージョンとともに表示されます。

ターミナルでbundlerが入っているかの確認
$ gem list | grep 'bundler'
bundler (1.14.6)

何も表示されなかったらgemインストールが完了していないので
今一度bundlerインストールの手順を確認してみてください。

Gemfileのセットアップ

bundlerの設定ファイルを作ります。
今作っているアプリのプロジェクトルートまで移動しコマンドを叩きます。

ターミナルで当該ディレクトリに移動して設定ファイル生成
# iOSアプリのプロジェクトのルートディレクトリが~/project/ios/ の場合
$ cd ~/project/ios/
$ bundler init

上記実行後、新しく Gemfile ができていればOKです。
中身を開くと以下のようになっています。

Gemfile
# frozen_string_literal: true
source "https://rubygems.org"

# gem "rails"

このファイルを元にインストールするgemを決定します。
今回は例として1.2.1 で固定したい場合の記述を
例示として記載します。

Gemfile
# frozen_string_literal: true
source "https://rubygems.org"

gem 'cocoapods' , '1.2.1'

これでインストール準備は完了です。

cocoapodsを使えるようにする

bundler では指定した場所にプラグインのファイルを配置できるので、明示的に配置します。
わかりやすいディレクトリならどこでも問題ありませんが
今回はメジャーな vendor/bundle を指定します。

ターミナルでcocoapodsのインストール
$ bundle install --path vendor/bundle

このコマンドを実行すると
実際に指定したバージョンの cocoapods を落としてきます。

インストールが完了したら、実際に使えるかやってみます。

ターミナルでcocoapodsのバージョン確認
$ bundle exec pod --version
1.2.1

実際にインストールする

以下のコマンドで実行します。

ターミナルでcocoapodsインストール実行
$ bundle exec pod install

なお、アップデートのときは以下

ターミナルでアップデート実行
$ bundle exec pod update

その後のバージョン管理

このあとは Gemfile を一緒にバージョン管理しておけば
どの cocoapods のバージョンでインストールしたかが一目瞭然になるので
cocoapods のバージョンが違ってうまくいかない!』ということが減ると思います。

(おまけ).gitignoreの追加

bundlerで入れるファイルは
バージョン管理の対象にしなくてもいいので
bundle install --path で指定したパスを追記しておきます。
今回の例だと vendor/bundle なので以下のように記述を追記

.gitignore
vendor/bundle

参考リンク