FrogApps 技術ブログ始めました!
RailsやiOS、HTML5の情報を発信中!! → http://qiita.com/teams/frogapps
CocoaPods便利ですね。ライブラリを組み込む際に、いろんな依存関係をうまくプロジェクトの外に追いやってくれます。
試しにQRコード用のライブラリZxingを組み込んで、どんな風になるかみてみましょう。このZxing、CocoaPodsを使わない場合は、沢山の.frameworkを組み込んだり、ヘッダファイルの参照パスを指定しなきゃいけなかったりとプロジェクトのBuild settingsへ手を加える必要があります。
CocoaPodsのインストールは以下の通り。頻繁に更新されているようなので、時々インストールし直すとよさそうです。現在(2013/1月)のバージョンは0.16.1。
$ sudo gem install cocoapods
$ pod setup
あとは、プロジェクトフォルダの直下にPodfileというファイルを作成して、組み込むプロジェクトを記載します。
platform :ios
pod "ZXing", '2.1'
ライブラリを読み込みます。
$ pod install
プロジェクト名.xcworkspaceというファイルができるので、Xcodeで開きます。元のプロジェクトと、Podsというプロジェクトを含んだ形のワークスペースが開きます。あとはTargetをプロジェクトにあわせてビルドすれば、Podsのほうもビルドしてくれます。これだけです。
つまり、Cocoa PodsでZxingを組み込んだ場合、プロジェクトファイルに.frameworkを追加したりヘッダの読み込みパスを追加したりが必要ないんですよ(ライブラリにもよるかも)。手で組み込むよりずいぶんと楽です。
では、本来必要だったその辺の設定はどこに行ったかというと、Pods/Pods.xcconfigに記載されます。CocoaPodsが外部ライブラリのための設定をここに記載してくれます。
よって、プロジェクトのBuild Settingsには、そのプロジェクト本体に必要なもののみを記載すれば良いことになります。「外部ライブラリのためにBuild settingいじったけど、後で見たら何のために変更したか分からない」なんてことも防げますね。
ALWAYS_SEARCH_USER_PATHS = YES
HEADER_SEARCH_PATHS = ${PODS_HEADERS_SEARCH_PATHS} ${PODS_ROOT}/ZXing/cpp/core/src/ ${PODS_ROOT}/ZXing/iphone/ZXingWidget/Classes/**
OTHER_LDFLAGS = -ObjC -liconv -lstdc++ -framework AVFoundation -framework AddressBook -framework AddressBookUI -framework AudioToolbox -framework CoreGraphics -framework CoreMedia -framework CoreVideo -framework ImageIO -framework QuartzCore
PODS_BUILD_HEADERS_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/ZXing"
PODS_HEADERS_SEARCH_PATHS = ${PODS_PUBLIC_HEADERS_SEARCH_PATHS}
PODS_PUBLIC_HEADERS_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/ZXing"
PODS_ROOT = ${SRCROOT}/Pods
ちなみに、CocoaPodsが取得してくるものには、そのライブラリのドキュメントやらサンプルコードやらは含まれないことが多いです。その辺は、ライブラリ本来のサイトを見に行きましょう。ライブラリを作られた方に感謝しつつ。