この記事に関して
この記事ではCocoaPodsで外部ライブラリを利用する場合の方法を説明していきます。
※CocoaPodsでのライブラリ公開方法に関しては触れていません。
- 想定読者: CocoaPodsを初めて利用する方
- CocoaPodsのバージョン: 1.9.0
CocoaPodsとは
- SwiftとObjective-CのためのDependency Manager
- 7万以上のライブラリがCocoaPodsから利用可能
- 依存関係はPodfileというひとつのテキストファイルで管理する
CocoaPodsのインストール方法
下記実行するだけ。CocoaPodsのバージョンをあげたい場合も下記でOK
sudo gem install cocoapods
CocoaPodsをプロジェクトで利用開始するには
- プロジェクトのルートディレクトリで
pod init
コマンドをたたく -
pod init
を実行するとプロジェクト配下にPodfile
という設定ファイルが作成されているので開く。Podfileに利用したいライブラリとバージョンを記述していく。- Podfileの最初の行はサポートバージョンとプラットフォームを記述する
- targetセクションは
target $TARGET_NAME do
で作成しend
で終了する
platform :ios, '8.0'
use_frameworks!
target 'MyApp' do
pod 'AFNetworking', '~> 2.6'
pod 'ORStackView', '~> 3.0'
pod 'SwiftyJSON', '~> 2.3'
end
- Podfileを編集して利用したいライブラリの記述が完了したら、
pod install
コマンドをたたく -
pod install
実行後、依存関係が解決するとワークスペースが自動的に作成されるので、Xcodeでプロジェクトを開いている場合は一度閉じてワークスペースを開き直す - ワークスペースを開くと、
Pods
というプロジェクトが新たに作成されていることを確認できる。Podsディレクトリ配下に追加したライブラリが格納される - 以上でライブラリをimportできるようになる
- 特定のライブラリをRemoveしたい場合は、Podfileからそのライブラリの記述を削除した上で
pod install
を実行するとそのライブラリとの依存関係が解消される
既存のワークスペースとCocoaPodsを統合したい場合
- CocoaPodsを利用すると自動的にワークスペースが作成されるが、既にワークスペースを利用しているプロジェクトでCocoaPodsを利用したい場合はどうすれば良いか
- Podfileのtargetブロックの外側に、ワークスペース名を一行足すだけでOK
workspace 'MyWorkspace'
pod install
と pod update
の使い分け
pod install
と pod update
コマンドはどう使い分けるか混同されるケースが多く、 pod install
はプロジェクトをセットアップする際の最初の1回だけ実行してそれ以降は pod update
を使用すると思われがちだが、そうとは限らない。原則として ライブラリを最新バージョンに更新したい場合のみ pod update
、それ以外は pod install
を使用する
pod install
を実行した場合の挙動
-
pod install
コマンドを実行して新しいライブラリをインストールするたびにPodfile.lockにインストールされたライブラリのバージョンが書き込まれる。 Podfile.lockは各ライブラリのバージョンをトラッキングする -
pod install
ではPodfile.lockに記述されたバージョンをインストールし、そのライブラリに最新のバージョンがあるかどうかは確認しない - ライブラリがPodfile.lockにまだ記述されてない場合、Podfileに記述されているライブラリのバージョンを取得する
- CocoaPodsは
pod update
が実行されない限り、Podfile.lockに記述されたバージョンを優先する
pod update
を実行した場合の挙動
-
pod update
は特定のライブラリを最新バージョンにあげたい場合のみ実行する - Podfileで指定したバージョン制限を超えてない場合、最新のバージョンに更新する
Podfile.lock
はgit管理に含めよう
-
Podfile.lock
ファイルはpod install
を実行すると自動的に作成される、ライブラリバージョンをトラッキングするためのファイル - 開発チーム内での意図しないライブラリ更新を防ぐためにも、
Podfile.lock
はgit管理に含めた方が良い- 例えばプロジェクトでライブラリCの1.0.0を利用していた場合、ライブラリCが最新バージョンの2.0.0をリリースしていてもPodfile.lockがあることで1.0.0を利用していることが担保される
- 開発メンバー間で同じバージョンのライブラリを利用していることを担保するには、
Podfile.lock
をgit管理してpod install
とpod update
コマンドを適切に使い分ける必要がある
Podsディレクトリはバージョン管理すべきか否か
- Podsディレクトリ配下に追加したライブラリが格納される
- Podsディレクトリは公式ではgit管理に含めて
.gitignore
しないことが推奨されいている
git管理する場合のメリット
- 開発メンバーがCocoaPodsをマシンにインストールしてなくてもリポジトリをcloneしたらすぐにビルドしてアプリを起動できる
- clone元とclone後で利用しているライブラリが同じであることが担保される
git管理しない場合のメリット
- リポジトリのサイズが小さくなる
- 異なるライブラリのバージョンに依存関係を変更した上でブランチをマージする際などにコンフリクトの心配がない