CocoaPodsはiOSのライブラリ管理ツールです。
CocoaPodsのインストール自体は簡単なのですが、各用語の関係を把握するのが取っ付きづらいので運用する際に覚えなければいけない最低限の用語をまとめてみました。
インストールについてはここやここなどがわかりやすかったです。
用語解説
用語
- Podfile (テキストファイル)
- podspec (テキストファイル)
- Specs (複数のpodspecの集まり)
- CocoaPods/Specs <公式のSpecs>
Specs
- [SPEC_NAME].podspecを持つ、決められたディレクトリ構成のGitリポジトリ
├── Specs
└── [SPEC_NAME]
└── [VERSION]
└── [SPEC_NAME].podspec
CocoaPods/Specs
公式のSpecsリポジトリ
- CocoaPodsをインストールした時にデフォルトでクローンされるリポジトリ。保存先は
~/.cocoapods/repos/master
- 他のSpecsリポジトリを追加したい場合は
$ pod repo add REPO_NAME SOURCE_URL
でクローンの保存先は~/.cocoapods/repos/REPO_NAME
podspec
- ファイル名は [SPEC_NAME].podspec
- どのGitリポジトリのどのファイルをインストールすればいいかを記載したテキストファイル
- 主にtagでバージョンを管理
Pod::Spec.new do |spec|
spec.name = 'Reachability'
spec.version = '3.1.0'
spec.license = { :type => 'BSD' }
spec.homepage = 'https://github.com/tonymillion/Reachability'
spec.authors = { 'Tony Million' => 'tonymillion@gmail.com' }
spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
spec.source_files = 'Reachability.{h,m}'
spec.framework = 'SystemConfiguration'
spec.requires_arc = true
end
Podfile
- xcodeprojと同じディレクトリに置く
- どのライブラリをインストールするかを記載するテキストファイル
- ライブラリ名だけを記載した場合、
~/.cocoapods/repos/
にクローンしてあるSpecsから一致するものが探される
platform :ios,'5.0'
pod 'JSONKit'
pod 'Reachability'
pod 'AFNetworking'
Gitリポジトリを直接指定する方法
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
[注意] 指定したリポジトリに[SPEC_NAME].podspecファイルが存在する必要がある
ライブラリのインストール
Podfileを置いたディレクトリで$ pod install
を実行する。
ざっくり以下の様なことが実行される
1. podfileを検証
2. ~/.cocoapods/repos/ や 直接GitリポジトリにPodfileに記載されたSpec名の[SPEC_NAME].podspecがあるか
3. [SPEC_NAME].podspecに従いライブラリをインストール
4. xcworkspeceを作成
用語まとめ
-
Podfile (テキストファイル)
-> どのライブラリをインストールするかを記載
-
podspec (テキストファイル)
-> どのGitからどのファイルをインストールすればいいかが記載
-
Specs (複数のpodspecファイルの集まり)
-> 決められたディレクトリ構成で各ライブラリのpodspecを持っている
-
CocoaPods/Specs <公式のSpecs>
-> インストール時にクローンされるSpecs
関係
-
Specs
は各ライブラリのpodspecファイル
を持っている -
podspecファイル
はそのライブラリのGitリポジトリのURLとインストールに必要なファイルが記載されている -
$pod install
をするとPodfile
に記載されたライブラリのpodspecファイル
をSpecs
から探し取得することにより、各ライブラリをインストールすることができる
Tips
導入時に実際につまづいたことの解決です。
Pod files推奨ディレクトリ構成
自身のライブラリをpodspecに対応させる場合の推奨ディレクトリ構成
├── Assets
├── CHANGELOG.md
├── Classes
└── ios <- iOS用のpodspecのspec.source_filesを指定するディレクトリ
└── osx <- OSX用のpodspecのspec.source_filesを指定するディレクトリ
├── Example
└── Podfile <- xcodeprojがあるディレクトリ
├── LICENSE
├── README.md
├── Rakefile
└── NAME.podspec
Podfileのテンプレート
xcodeprojがあるディレクトリで$ pod init
を実行するとテンプレートを元にしたPodfileが作成されます。そのカスタマイズ。
自前のSpecsの作り方
自前のライブラリ(podspec)をCocoaPods/SpecsにPull Request
pod pushについて
podspecの書き方例
AFNetworkingが実用的で参考になると思います。(subspecの書き方とか)
@importを使用している場合、podspecに追加するフラグ
s.compiler_flags = '-fmodules'
プロジェクトからCocoaPodsを削除する
何か問題があってプロジェクトを$ pod install
する前の状態に戻したい場合に単純にPodfile``Podfile.lock``xcworkspace
を削除するだけではだめです。xcodeprojに追加されたスクリプトなども削除しないとビルドが通りません。
まとめ
自身のライブラリをCocoaPodsに対応させないのであればpodspecを作ることはないです。
公式のCocoaPods/Specsにあるライブラリをインストールしたいだけなら、xcodeproj
と同じディレクトリにインストールしたいライブラリ名を記載したPodfile
を作成し、$ pod install
するだけになります。
がっつり導入する場合にはpodspecやPodfileの書き方など覚えることが多く非常に導入コストがかかると思いますが、それ以上の多大なる恩恵が得られるツールです。最近ではCocoaPodsに対応してないライブラリは導入しないくらいです。
特に一番助かったことは自分のプライベートなライブラリの保守性が非常に高まったことです。