はじめに
モバイル向けアプリを作っている時、現在実機にインストールされているバージョンを起動画面や設定画面に表示することがあると思います。バージョンの場合はApplication.version
で取得できるので簡単に実装できるのですが、ビルド番号を実機で取得する方法は用意されていません。
そこで、実機でのビルド番号取得を簡単に実現するライブラリを作成したので紹介したいと思います。
ちなみにEditorの場合は下記のように取得できるのですが、もちろん実機では動作しません。
// バージョン
PlayerSettings.bundleVersion;
// ビルド番号
PlayerSettings.iOS.buildNumber;
PlayerSettings.Android.bundleVersionCode;
想定している用途
よくあるパターンとして、CIでビルドするたびにセマンティクスバージョニングのバッチバージョンへビルド番号に反映させることあります(e.g. v1.0.[ビルド番号]
) 。この方法ですとバージョン表記だけでどこまでの変更が反映されているか判断できるのでビルド番号は必要ないのですが、アプリバージョンを頻繁に変えたくない場合もあると思います。
バージョン表記を綺麗に保ちたい場合などが多いと思うのですが、今回僕が必要だと思ったきっかけはTest Flightの関係です。Test Flightでは外部テスターにアプリを配布する際に簡易的な審査(1日程度)が挟まるのですが、同一バージョンは審査されない仕様を利用すると即時配布することが可能になります。この仕組みを使うためにバージョンを変えなくなかったのですが、実機にインストールされているバージョンが分からなくなってしまうためビルド番号を併記したいという状況になりました。
免責事項
プラットフォーム毎に呼び方が違いますが、この記事では下記のような使い分けをしています。
- バージョン (Version)
- iOS:
CFBundleShortVersionString
- Android:
versionName
- iOS:
- ビルド番号 (Build Number)
- iOS:
CFBundleVersion
- Android:
versionName
- iOS:
導入方法と使い方
READMEに書いてある通りですが、簡単に日本語でも紹介します。
導入方法
Unity 2019.3.4f1, Unity 2020.1a21以降で使えるPackage Managerの機能を使って配布しています。
- Unityプロジェクトを開く
- Window -> Package Managerを開く
- 左上の"+"ボタンから"Add package from git URL..."をクリック
-
https://github.com/nkjzm/UniBuildNumber.git?path=Assets/UniBuildNumber
を入力し、"Add"をクリック
使い方
下記の3つのstaticなメソッドを用意してあります。iOS/Androidで型が違うので注意してください。
// Get build number in iOS
string buildNumber_ios = nkjzm.UniBuildNumber.GetIOSBuildNumber();
// Get build number in Android
int buildNumber_android = nkjzm.UniBuildNumber.GetAndroidVersionCode();
// Get build number in current platform (iOS or Android)
string buildNumber = nkjzm.UniBuildNumber.GetCurrentBuildNumber();
僕の場合は下記のように使用しています。
private void Start()
{
versionLabel.text = $"{Application.version} ({UniBuildNumber.GetCurrentBuildNumber()})";
}
参考
今回のライブラリは下記の記事を参考にライブラリを作成・公開させていただきました。ありがとうございます。
最後に
普段はTwitterでUnityやxR技術の情報発信をしているので、良かったらフォローしていただけると嬉しいです。