【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;
        }
    }
}

参考