この間書いたように、mwaterfall/MWFeedParserというCocoaPodsでも扱えるRSSフィード解析のライブラリに機能が足りなくて困ったのですが、実装が簡単だったこともあってささっと書いてプルリクを出しておきました。
ところが、このプルリクエストがすぐにマージされたとしてもCocoaPodsで参照できるバージョンがすぐに変わるとは限りませんし、現時点ではプルリクは完全にスルーされているのでforkを使うしかありません。
PodfileでGitリポジトリを指定
CocoaPods(およびPodfile)には、CocoaPodsに登録されていないバージョンを使うための記述が用意されています。このあたりはRubyのgemと同じような仕組みになっているようですね。
今回のケースでいうと、元々はPodfileこのような記述をしていたところを、
pod 'MWFeedParser'☄
↓のように書き換えます。
pod 'MWFeedParser', :git => "https://github.com/pi-chan/MWFeedParser.git", :branch => "usable"☄
:git
指定でリポジトリのURLを、:branch
で対象ブランチを指定できます。何も指定しなければmasterを使います。
これで$ pod install
をすれば全てうまくいく、というわけです。
うまくいかないケース
先ほど紹介したMWFeedParser
のケースではまくいくのですが、そうでないケースも多々ありそうです。というのは、リポジトリがそのままCocoaPodsに使える構成になっていないこともあるからです。
例えば上に引っ張って更新するコントロールのためのpilot34/MNMBottomPullToRefreshは、Forkしたリポジトリを指定しても正しくインストールしてくれません。
このような場合はForkリポジトリ専用のpodspecを用意してあげるしかありません。
podspecを探す
CocoaPodsに登録されているすべてのpodspecはここにあります。
ここから探せばいいのですが数が多くて探すのも一手間かかるので、MNMBottomPullToRefresh podspec
などとGoogleで検索するのが早いでしょう。
Specs/MNMBottomPullToRefresh/0.0.1/MNMBottomPullToRefresh.podspec at master · CocoaPods/Specs
で、出てきたpodspecをGistなどのパブリックなところに置きます。実際に僕が使っているのがこれ。
MNMBottomPullToRefresh.podspec
元のpodspecと変えたところが一箇所あります。
# 変更前
s.source = { :git => "https://github.com/emenegro/bottom-pull-to-refresh.git", :commit => '82d5fed6dd7f4a4df531a6954398b60b9aecec6d' }
# 変更後
s.source = { :git => "https://github.com/pi-chan/bottom-pull-to-refresh.git", :branch => 'custom-text' }
リポジトリを自分のForkに書き換え、:commit
指定の代わりにブランチ指定に変えてあげました。もちろん:commit
をそのまま使ってもいいですが。
そしてPodfileをこのように書き換えます。今度はpodspecを直で指定してあげます。このときはgistのrawのURLを使ってください。
# 変更前
pod 'MNMBottomPullToRefresh'
# 変更後
pod 'MNMBottomPullToRefresh', :podspec => "https://gist.githubusercontent.com/xoyip/9225911/raw/a2b35c7bf1b6d207402f6400f4386f6900fe2ac8/MNMBottomPullToRefresh.podspec"☄
まとめ
- 拡張したかったらforkする
- Podfileをリポジトリ、ブランチorコミット指定にする
- だめならpodspecを書き換えてpodspec指定!