【Unity】ビルド完了時にバージョンをインクリメント
開発をしている時に各プラットフォームへビルドが完了したタイミングで ビルドバージョンが自動的にインクリメントされると便利です。
実装
[PostProcessBuild]
ビルド完了時に実行する場合、[PostProcessBuild]を使用します。
PlayerSettings.iOS.buildNumber
buildNumberはstringのためint.Parse -> +1 -> string
。
iOSはbundleVersionとbuildNumberの組み合わせで同一かどうかを判定しているため、bundleVersionを変更したらbuildNumberを手動でゼロにしても問題ありません。
PlayerSettings.Android.bundleVersionCode
intのためそのまま+1します。
AndroidではversionCodeを以前よりも大きい数字にする必要がありますが、 incrementをしていれば問題はないはずです。
PlayerSettings.bundleVersion
こちらは各プラットフォームで共通のため、同じ環境で書き出しを行うと1つのプラットフォーム向けにビルドするたびにbundleVersionが変更されてしまい、かえって不都合な場合があると思います。
書き出し先のプラットフォームが1つの場合、例えば、よくある「major.minor.point」のようなbundleVersionであれば、pointの部分は以下のようにインクリメントできます。
//0.0.0 -> 0.0.1 var currentBundleVersion = PlayerSettings.bundleVersion; var vs = currentBundleVersion.Split('.'); var index = vs.Length-1; var point = int.Parse(vs[index]) + 1; vs[index] = "" + point; var bundleVersion = string.Join (".", vs); PlayerSettings.bundleVersion = bundleVersion;
サンプル
ビルド完了時にiOSのbuildNumber、AndroidのbundleVersionCodeを+1します。 UnityEditorのため、Editorフォルダ内にスクリプトを配置する必要があります。
using UnityEditor; using UnityEditor.Callbacks; public class AutoIncrementVersion{ [PostProcessBuild] public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) { if (target == BuildTarget.iOS) { //0 -> 1 var buildNumber = int.Parse (PlayerSettings.iOS.buildNumber) + 1; PlayerSettings.iOS.buildNumber = "" + buildNumber; } else if (target == BuildTarget.Android) { //0 -> 1 var versionCode = PlayerSettings.Android.bundleVersionCode + 1; PlayerSettings.Android.bundleVersionCode = versionCode; } } }