cocoapodsの仕組みとバージョン固定

  • 44
    Like
  • 0
    Comment
More than 1 year has passed since last update.

はじめに

iOS開発でのライブラリ管理といえばcocoapodsだと思います。
超有名なcocoapodsですが、一歩間違えば開発環境が変わってしまうことも。

開発者のローカルにあるcocoapodsのバージョンがまちまちだと
開発環境が変わってしまいますよね。
最悪の場合ビルドが出来ない可能性もあります。

そんな人のためにbundlerというものがありますが、
その前にcocoapodsについて簡単に仕組みを理解しておくと
ハマった時に何かと役に立つと思うので説明します。

1.cocoapodsとは

CocoaPodsLogo.gif
言わずと知れたiOS関係のライブラリ管理ツールですね。
cocoapodsはRubygemsに入っているgemです。
Rubygems?gem?

2.Rubygemsとは、gemとは

favicon.png
Rubygemsとはrubyに標準で搭載されているパッケージ管理ツールのことです。
そのパッケージはgemと呼ばれています。
Ruby on Railsはよく聞くと思いますが、
Railsもgemの一つでRubygemsを使ってインストールできます。

3.cocoapodsはgem

cocoapodsを最初にインストールした時に
$ sudo gem install cocoapods
を実行したのは覚えていますか?

Macにはrubyが標準でインストールされていて、
rubyの中にはRubygemsが標準で搭載されています。
そのRubygemsを使ってcocoapodsをインストールしているのです。

4.cocoapodsのバージョン固定の概要

Rubygemsのgemのバージョンなどを管理できるツールがあります。
それがbundlerというものです。
このbundlerを使うことでcocoapodsのバージョンを指定することができます。

5.バージョン指定をやってみる

bundlerのインストール

$ sudo gem install bundlerでbundlerがインストールされます。
お分かりの通りbundlerもgemです。
スクリーンショット_2015-09-15_0_12_51.png

bundlerの初期化

cocoapodsを使っているディレクトリに移動して、
$ bundle initをすると初期設定をしてくれます。
スクリーンショット_2015-09-15_0_21_26.png

初期化で作成されたGemfileの編集

$ vi Gemfileをするとデフォルトではこのようになっていると思います。
スクリーンショット 2015-09-15 0.24.38.png

このように編集していきます。 (バージョンは適宜変更してください)
スクリーンショット 2015-09-15 0.26.45.png

cocoapodsのインストール

$ bundle install --path vendor/bundle
Gemfileに書かれているライブラリをインストールします。
(ここではcocoapodsしか書いていないのでcocoapodsだけです)

指定バージョンでpod install

$ bundle exec pod install
今回の例だとcocoapodsの0.35.0でPodfileに書かれたライブラリを
インストールしてくれます。

podのバージョンは$ bundle exec pod --versionで確認ができます。

説明は終わりです!簡単だったでしょう?

ちなみに

bundlerを使わずにcocoapodsのバージョンを合わせる方法もあります。
cocoapodsをバージョン指定して再インストールするというものです。
これは開発者みんなにやってもらう必要があります。

※ただし複数のプロジェクトを扱っている場合は、
いちいち切り替えるのが面倒なのでおすすめしません。

今使用しているバージョンを確認

$ pod --version
0.38.2

指定したバージョンのcocoapodsをアンインストール

$ sudo gem uninstall cocoapods --version '=0.38.2'

バージョンを指定してインストール

$ sudo gem install -v 0.35.0 cocoapods

インストールしたバージョンを確認

$ pod --version
0.35.0

おわり

これで複数人での開発でも環境に相違なく開発ができると思います。
特にjenkinsなどのCIでリリースするときはやっておくと良いでしょう。

指摘や質問があればコメントください。