Cocoa/iOSライブラリのPodspecを修正して、CocoaPodsで依存関係の解決

みなさんCocoaPodsを活用してますか? CocoaPodsを使用するとライブラリの検索から依存関係の管理・インストールまで簡単に行うことができます。

CocoaPodsでライブラリを管理するためには、基本的にはライブラリの作者がpodspecというファイルを記述してCocoaPodsで使えるように必要があります。

今回使ってみようと思ったのは、QuickDialogというiOS HIG(ヒューマンインタフェースガイドライン)に準拠した設定画面のフォームが簡単に作れるものです。

このライブラリはCocoaPodsに対応してるんですが、依存するフレームワークの記述がないためインストール後にプロジェクトをビルドしようとすると以下のようにエラーになります。

f:id:zepbag:20120113020403j:image
f:id:zepbag:20120113020402j:image


ここで、手動でフレームワーク(この場合MapKit.framework)を追加してもいいんですが、CocoaPodsは自分専用に作成したリポジトリからpodspecを参照してライブラリをインストールすることが可能です。

なので新たに自分専用リポジトリを作成し、修正したpodspecを配置してビルドできるようにしてみます。

今回修正するpodspecの対象ライブラリ

  • QuickDialog

Podspecファイルの作成とバージョン番号の変更

必要なもの

# ライブラリをcloneして、CocoaPodsでインストールしたバージョンのタグにHEADを移動
git clone git://github.com/escoz/QuickDialog.git
cd QuickDialog
git reset --hard 0.1

# CocoaPds/Specからpodspecファイルを取得
wget https://raw.github.com/CocoaPods/Specs/master/QuickDialog/0.1/QuickDialog.podspec

# podspecに修正を加える
edit QuickDialog.podspec

# 以下を追加/
--- ../QuickDialog/QuickDialog.podspec.orig	2012-01-13 00:36:09.000000000 +0900
+++ QuickDialog/0.1/QuickDialog.podspec	2012-01-13 01:30:24.000000000 +0900
@@ -14,6 +14,7 @@
 
   s.source_files = 'quickdialog'
   s.clean_paths  = 'sample', '*.xc*', 'libQuickDialog', 'other'
+  s.framework = 'MapKit'
   s.requires_arc = true
 
   def s.post_install(target)

# 誤りがないかチェック
pod spec lint QuickDialog.podspec

自分用のCocoaPods用のpodspecを配置する

修正したpodspecファイルを自分のリポジトリにコミットして管理しますので
あらかじめ専用のリポジトリを作っておきます。
私の場合は、podspecsという名前で作成しました。

git clone git@github.com:roothybrid7/podspecs.git
cd podspecs
# ライブラリ名(podspecのs.name)/バージョン番号(s.version)のディレクトリ作成
mkdir -p QuickDialog/0.1
# 先ほど作成したpodspecファイルをコピー
cp <QuickDialog.podspec> QuickDialog/0.1/
# commit and push.
git add . && git ci -m 'Add QuickDialog podspec.' && git push origin master

CocoaPodsにpodspecのリポジトリを追加

CocoaPodsに作成したリポジトリを登録します。

# podspecのrepositoryを追加
pod repo add mypods git://github.com/roothybrid7/podspecs.git

Podfileの修正とアップデート

先ほど修正したpodspecファイルを参照するように、Podfileを修正します。

# podspecを配置したURLを記述する(raw)
-dependency 'QuickDialog', '~> 0.1'
+dependency 'QuickDialog', '~> 0.1', :podspec => 'https://raw.github.com/roothybrid7/podspecs/master/QuickDialog/0.1/QuickDialog.podspec'

修正したら `pod install` を実行して更新します。

これで再ビルドすると、MapKit.frameworkを手動で追加することなしに、正常にビルドすることができるようになりました。

f:id:zepbag:20120113020404j:image

終わりに

このようにライブラリのpodspecの記述がたりない場合、自分で自由に修正することが可能なので、自分専用リポジトリを作成して試してみてはいかがでしょうか

今回作成した自分専用podspecリポジトリ