Unity アプリのバージョンを知る

スマートフォンアプリを開発していて、複数のデバイスを使っていたりすると、
「あれ、このデバイスに入っているこのアプリはいつのバージョンのもの?」
みたいなことに立ち会うことがたまにあります。

開発用のビルドでは、そのアプリがいつのアプリなのか分かると助かります。

そのためバージョンナンバーをアプリアイコンにオーバーレイで書き込むアセットを作って
ストアに公開しました。

AppVersionIcon
https://www.assetstore.unity3d.com/jp/#!/content/65849

f:id:kurihara-n:20160712230042p:plain

こんな感じのエディタウィンドウでバージョン番号を設定してapplyすると
アプリのアイコンにナンバーが書かれます。

f:id:kurihara-n:20160712230308p:plain

こんな感じ。

これは割とマイルストーンごとに手動で使ってもらうことを想定しているので、
自動でビルド毎にナンバーが書かれるようなものにはなっていません。

もう1つのやり方として、
自身のアセンブリからバージョン情報を取得し実行中にどこかで表示するという方法があります。

using UnityEngine;
using System.Collections;
using System.Reflection;
using System;

[assembly: AssemblyVersion("1.0.*")]
public class BuildDate : MonoBehaviour
{
    string   dateText;
    GUIStyle style = new GUIStyle();
    Rect     rect  = new Rect(0, 0, 640, 30);
    const int defaultFontSize = 12;

    void Start()
    {
        var asm = System.Reflection.Assembly.GetExecutingAssembly();
        var version = asm.GetName().Version;

        int days = version.Build;
        int seconds = version.Revision * 2;

        DateTime baseDate = new DateTime(2000, 1, 1);
        DateTime buildDate = baseDate.AddDays(days);
        DateTime buildDateTime = buildDate.AddSeconds(seconds);

        dateText = "Build date :" + buildDateTime.ToString();
        style.fontSize = (int)(defaultFontSize * Mathf.Max(1.0f, ((float)Screen.width / rect.width)));
    }

    void OnGUI()
    {
        GUI.Label(rect, dateText, style);
    }
}
<||

こちらはスクリプトをコンポーネントとしてアプリのメイン画面に存在するオブジェクトなどに追加しておけば、
ビルド毎の時間を時間を表示してくれるので便利です。
アプリを起動する必要はありますが、自動にビルドごとに更新されていくので情報は確実です。

例えば、相互に通信するアプリを作っていた場合バージョン違いで送受信するデータに不整合が起こるようなことは
まま起こりえます。