CocoaPods

CocoaPodsはObjective-Cにおけるパッケージ管理ツールです。 gemとかnpmとかCPANみたいな立ち位置のツールです。

基本的にはgemと似せていて、ライブラリをパッケージ登録する際には、 podspecというファイルを作って、 それをpod trunk pushで公開用に登録する感じです。

アップデートプロセス

podspecファイルに一度書いたクラスのパスやメタ情報はあんまり更新しないのでいいですが、 s.version = '3.1.0' というようなバージョン情報はアップデートの度に更新しないと行けません。

手動でやるのはない感じがしたので、色々探したのですが今のところそういうバージョン情報を自動的に更新してくれるツールがないようです。

podspec-bump

そこで、azu/podspec-bumpというコマンドラインツールを書きました。

機能としてはシンプルでpodspecファイルのバージョン周りだけを扱います。 (release-itのようにgit tagなどまではやらない)

  • podspecバージョン情報の更新
    • -wを付けない場合はdry-runなので書き込まない
    • Semantic Versioningで更新できる
  • podspecバージョンの表示

インストール

cocoapodsがrubyなので、rubyで書くべきなんですが時間がなかったのでnodeで書きました。 (他の実装みても何か正規表現でバージョン取り出してたのでまあいいかなとか思ってしまった)

npm install -g podspec-bump

使い方

デフォルトでは、実行したディレクトリにある*.podspecファイルを自動で選択してくれます。 特定のファイルを指定したい場合は-pで指定出来ます。

$ podspec-bump -h

Usage: podspec-bump <increment> [options]

  -h, --help              displays help
  -w, --write             write incremented version
  -i, --increment String  Incrementing "major", "minor", or "patch" version; or specify version [default: "patch"]
  -p, --path String       path to podspec

先ほども書いていたように、デフォルトではdry-runなのでバージョンの書き換えを反映したい場合は-wオプションを付けて下さい。

$ podspec-bump -w

Incrementing version

<increment> には "major", "minor", or "patch" , 特定の値が指定出来ます。 (デフォルトは"patch"です)

例えば、現在が1.0.0の時にpatchアップデートしたら1.0.1になる感じですね。 (minorなら1.1.0、majorなら2.0.0という感じです)

$ podspec-bump major -w
# or
$ podspec-bump -i 1.2.3 -w

Specific podspec file

特定のファイルを指定した場合は-pでファイルパスを指定する事で出来ます。

$ podspec-bump -p /path/to/example.podspec

Dump version

その、podspecファイルに書かれているバージョンを取得したい場合は--dump-versionオプションをつけると出来ます。 本来は、cocoapods自体が提供して欲しいのですがなかったのでつけました。

$ podspec-bump --dump-version 
0.1.0

これを応用すれば、コマンドを組み合わせて、podspecの更新を公開するまでが自動化できると思います。

pod trunkの自動化

先ほど書いていた自動化の例です。

  1. podspecのバージョン更新
  2. git tag
  3. pod trunk push

という感じのは、以下みたいにかけますね。

podspec-bump -w # update version
git commit -am "bump `podspec-bump --dump-version`" 
git tag "`podspec-bump --dump-version`"
git push --tags
pod trunk push 

Contributing

azu/podspec-bump からContributing募集しています。

おわりに

最近を小さいライブラリを書いては公開するのを繰り返してるので、 このpodspecのアップデートをする作業がとても面倒だったので作ってみました。

公式にそれっぽい事をやれそうなCocoaPods/VersionKitというのがあるので、ruby版とか作ってくれると皆幸せになるんじゃないですかね。