Cocoa/iOSライブラリのPodspecを修正して、CocoaPodsで依存関係の解決
みなさんCocoaPodsを活用してますか? CocoaPodsを使用するとライブラリの検索から依存関係の管理・インストールまで簡単に行うことができます。
CocoaPodsでライブラリを管理するためには、基本的にはライブラリの作者がpodspecというファイルを記述してCocoaPodsで使えるように必要があります。
今回使ってみようと思ったのは、QuickDialogというiOS HIG(ヒューマンインタフェースガイドライン)に準拠した設定画面のフォームが簡単に作れるものです。
このライブラリはCocoaPodsに対応してるんですが、依存するフレームワークの記述がないためインストール後にプロジェクトをビルドしようとすると以下のようにエラーになります。
ここで、手動でフレームワーク(この場合MapKit.framework)を追加してもいいんですが、CocoaPodsは自分専用に作成したリポジトリからpodspecを参照してライブラリをインストールすることが可能です。
なので新たに自分専用リポジトリを作成し、修正したpodspecを配置してビルドできるようにしてみます。
今回修正するpodspecの対象ライブラリ
- QuickDialog
Podspecファイルの作成とバージョン番号の変更
必要なもの
- 修正する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を手動で追加することなしに、正常にビルドすることができるようになりました。
終わりに
このようにライブラリのpodspecの記述がたりない場合、自分で自由に修正することが可能なので、自分専用リポジトリを作成して試してみてはいかがでしょうか
今回作成した自分専用podspecリポジトリ
参考
- CocoaPods ではじめる Objective-C ライブラリ管理 (2) - Watsonのメモ
- A-Liaison BLOG: CocoaPods に対応していないライブラリを集めた自分用リポジトリを作る方法
- CocoaPods/CHANGELOG.md at 6cf539af4882d2632a20ddc6be7b15d3d31e6c2e · CocoaPods/CocoaPods · GitHub
- QuickDialog - ESCOZ Inc
- roothybrid7/QuickDialog · GitHub
- Cocoaの日々: [Info] 設定画面構成ライブラリ - QuickDialog