CocoaPodsでのライブラリ公開

Objective-CなライブラリはCocoaPodsにてインストールする事が殆どですが、
CocoaPods でライブラリを公開するにはライブラリの定義ファイルであるpodspecを、
CocoaPods/SpecsにPullRequestして取り込んで貰う必要があります。

Contributing to the master repo · CocoaPods/CocoaPods Wiki の手順に乗っ取って普通に手動でやっても問題無いですが、更新の度にやるのは結構面倒です。

そこで、CocoaPodsのサブコマンドの pod push をつかってやる手順についての記事です。

pod push

必要なもの

pod help push で見るとわかりますが、pod push は単純に指定したspecファイルをlintにかけて、gitリポジトリ(REPO)にpushしてくれるコマンドです。

$ pod push REPO [NAME.podspec]

  Validates NAME.podspec or `*.podspec' in the current working dir, creates
  a directory and version folder for the pod in the local copy of
  REPO (~/.cocoapods/repos/[REPO]), copies the podspec file into the version
  directory, and finally it pushes REPO to its remote.

デフォルトだと、~/.cocoapods/repos/[REPO] には master しか無いと思うので、自分用の [REPO] ディレクトリを追加していきます。

既に、Github上にazu/Specsのようなforkしたリポジトリがあるなら以下のような感じに下準備します。
(azu は各自適当に)

# ~/.cocoapods/repos/ で行う
# forkした CocoaPods/Specs を 適当な名前(今回はazu)のディレクトリにcloneしてくる。
# cloneしたら、remoteにCocoaPods/Specsも追加しておく(pull-request用)
cd ~/.cocoapods/repos/
git clone [email protected]:azu/Specs.git azu && cd azu && hub remote add CocoaPods/Specs

そして、追加したい podspecがあるディレクトリに行って、以下のような感じで、azu/Specs への
podspecをコミット -> push -> CocoaPods/Specs へpullrequestします。

( --git-dir=で指定してるのは、各自追加した自分の[REPO]です)

# 追加したいpodspecをまず自分のリポジトリにpushする
pod push azu 追加したい.podspec
# 自分のリポジトリをpullrequestする
hub --git-dir=/Users/azu/.cocoapods/repos/azu/.git pull-request -b CocoaPods:master -h master

後は、PullRequestの文章を入力すれば、CocoaPods/SpecsへPullRequestされて、取り込まれればCococaPodsでの公開は完了です。

podspecを指定して自動的にルールに従った配置に追加してpushするコマンドとして、cocoapods-publisherというのもありますが、 pod push の方がLintも書けてくれて公式のコマンドなので、こちらを利用したほうがいいでしょう。

おまけ

CocoaPods経由でインストールするには必ずしもCocoaPodsにPull Requestして取り込んで貰う必要はなくて、野良リポジトリでも問題無く出来ます。

やり方は色々ありますが、シンプルでやりやすいのは、azu/AZDateBuilder のように Gitリポジトリのルートに podspec ファイルを配置して、以下のように :git シンボルを指定するだけでインストールできます。
(毎回ダウンロードが走りますが)

pod 'AZDateBuilder', :git => 'https://github.com/azu/AZDateBuilder.git'