versionCode
について、ぼくがこれまで見てきたプロジェクトで結構失敗してるケースを見かけてるので、改めて versionCode
をどう扱えばよいのかをまとめます。
アンチパターン
往々にして間違いやすいパターンがあり、それは versionName
と同じ値を使おうとするパターンです。
例えば以下のような感じです。
versionCode 10200
versionName "1.2.0"
versionName
を元にメジャー、マイナー、パッチにそれぞれ2桁ずつ割り当てて、それを数値化したものです。
何が問題なのか?
この場合の大きな問題としてはPlay Consoleアップするときに問題になる可能性があります。
例えば、テストトラックで配布したい場合です。特に修正がなく、そのままプロダクションリリースするときは問題はないですが、修正してテストトラックで再配布したいときに versionCode
を上げる必要があります。
このとき、 versionCode
を versionName
と同じような扱いにしてるため、 versionName
をどうするかが問題なります。まだプロダクションリリースをしていないにも関わらず、 versionName
の値が変わることになります。
ベストプラクティス
ベストプラクティスは非常にシンプルです。
最初のリリースでは versionCode
に 1
を設定して、Play Consoleにアップするたびに versionCode
をインクリメントするだけです。
例えば、 1.2.0 が8回目にPlay Consoleにアップするときは以下のようになります。
versionCode 8
versionName "1.2.0"
ドキュメントにも以下のように書いてあります。
Typically, you would release the first version of your app with
versionCode
set to 1, then monotonically increase the value with each release, regardless of whether the release constitutes a major or minor release.
これだけです!
versionNameを関連付けたい場合
どうしても versionCode
と versionName
を関連付けたい場合は、以下のように、 メジャー、マイナー、パッチに加えて、ビルド番号みたいな値を追加してください。
versionCode 1020000 // 末尾二桁を自由に使えるようにする
versionName "1.2.0"
計算でやるには以下のようにすると良いでしょう。
BuildConfigを使う
versionCode
と versionName
を関連付けたいときってどういうときかを考えたときに、例えばHTTP ヘッダーに数値として含めたいとか、そういうときじゃないかなと思います。
このときに別に versionCode
を使う必要はまったくなく、新しく BuildConfig の値を設定することも検討しましょう。
最後に
versionCode
の運用は最初にミスると後々変更することが難しくなってくるものです。しっかりと versionCode
が何に使われてるのかを理解しましょう。