Swift用依存管理マネージャのCocoaPodsを導入する

iOSアプリ開発時にHTTP通信が必要になったのでライブラリを探していると、CocoaPods と、同様のツールでわりと新しめのCarthageというのがあった。

最終的にはCarthageを採用したので別の記事に書きますが、CocoaPodsもインストール試してみたので、導入の備忘録と感想を残しておきます。

Cocoapodsとは?

cocoapods.org

CocoaPods Guides - Getting Started

CocoaPods manages library dependencies for your Xcode projects.

The dependencies for your projects are specified in a single text file called a Podfile. CocoaPods will resolve dependencies between libraries, fetch the resulting source code, then link it together in an Xcode workspace to build your project.

Ultimately the goal is to improve discoverability of, and engagement in, third party open-source libraries by creating a more centralised ecosystem.

頑張って訳すとこんな感じ?(間違ってたらすいません。)

CocoaPodsはあなたのXcodeプロジェクトのライブラリ依存性を管理します。 あなたのプロジェクトへの依存性はPodfileと呼ばれるひとつのテキストファイルで指定されます。 CocoaPodsはライブラリ間の依存性を解決し、結果のソースコードを取得し、その後あなたのプロジェクトをbuildするためにXcodeのworkspaceにリンクします。

最終的なゴールは、エコシステムを集中させることでサードパーティ製のオープンソースの検索性、関連性を改善することです。

要するに依存性解決ツールのようです。Rubyでいうとbundler、(私のように)PHPerからするとcomposerみたいな感じでしょうか。ライブラリも探せるようなので、雰囲気的にはpackagistも兼ねてる感じ。

まずはCocoaPodsをインストールしてみる

gemでインストールします。

$ sudo gem install cocoapods

sudoを使わない時は--user-installフラグをつけるなどが推奨されています。

Podfileに依存ライブラリを書く

Xcodeプロジェクトディレクトリ直下でpod initコマンドを叩くと、Xcodeプロジェクト設定が読み込まれ、Podfileが自動生成されます。

$ pod init
$ ls Podfile
Podfile

Xcode設定が読み込まれて自動的に設定されるようです。下記は

  • プロジェクト名が「hoge
  • 対応バージョンが6.0以上

の設定です。

$ cat Podfile
# Uncomment this line to define a global platform for your project
# platform :ios, '6.0'

target 'hoge' do

end

target 'hogeTests' do

end

Podfileにライブラリを設定する

HTTP通信ライブラリであるAlamofireを使いたいので、README.mdを参考に設定してみます。

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

target 'hoge' do
  pod 'Alamofire', '~> 1.2'
end

ライブラリをインストールする

設定できたらpod installします。

$ pod install

*.xcworkspaceというのが出来上がるので、今後はいつものxcodeprojの代わりに、これを使います。

$ open App.xcworkspace #=> Xcodeが開く

CocoaPodsの感想

CocoaPodsは*.xcworkspaceというファイルを作るようで、はてxcworkspaceとは何ぞやということで調べるも、いまいちコレだという資料も見当たらず良くわからずじまい。 要するにこれを使うとライブラリをリンクした状態でプロジェクトを開けるらしいのだけど、仕組みがわからないとハマったときどうにもならなくなりそう。