2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unity #3Advent Calendar 2020

Day 1

Unity Cloud Buildのビルド番号などをゲーム中で取得するライブラリ、CloudBuildManifestを作った!

Posted at

この物語はフィクションです。

非プログラマー 「なんかバグってる!直して!」

プログラマー  「どれどれ?バージョンは?」

非プログラマー 「えーっと、ちょっと前のやつ!」

プログラマー  (ちょっと前っていつのだよ?何回ビルドしたと思ってんだよ!?)

はじめに

先ほどの物語はフィクションではありますが、モバイルゲームアプリの開発現場において、このような不幸な経験がある方も多いのではないでしょうか?

チーム内にゲームを配布していると、チームメンバーから「バグ報告」や「要望」をもらうことがあります。この時、問題になるのがチームメンバーが「どのバージョンの・どのビルド設定のバイナリを使っているのか?」です。頻繁に更新・修正・配布しているプロジェクトでは、古いバージョンを使い続けて、直っているバグを報告してしまうこともありえます。また、ビルド設定が複数あるプロジェクトでは、想定と違ったビルド設定をチームメンバーが使っていて、バグの原因特定に苦戦することもありえます。

もしこのような課題を抱えていて、かつ、あなたがUnity Cloud Buildを使っているのであれば、ぜひ私が作った、CloudBuildManifestを用いて、ビルドターゲットとビルド番号をアプリ内に表記してみませんか?

この投稿では、私の作ったCloudBuildManifestを紹介します。

ソースコードはこちら : https://github.com/RyotaMurohoshi/CloudBuildManifest

CloudBuildManifestの使い方

Unity Package Managerが使えるUnity、そしてGitがインストールされている環境で、導入したいUnityプロジェクトのPackages/manifest.jsonファイルのdependenciesセクションに次の一行を追加して下さい。TAG_YOU_WANT_TO_USEには、使いたいCloudBuildManifestのバージョンを指定してください。

"com.ryotamurohoshi.cloudbuildmanifest": "https://github.com/RyotaMurohoshi/CloudBuildManifest.git#TAG_YOU_WANT_TO_USE",

次のようなコードを使うことで、ビルド情報を取得することができます。私のおすすめは、次のようにCloudBuildTargetNameBuildNumberを併記してゲームアプリ内に表示する方法です。

string buildInfoText;
if (BuildManifest.HasBuildManifest())
{
    var buildManifest = BuildManifest.Load();
    buildInfoText = $"{buildManifest.CloudBuildTargetName} #{buildManifest.BuildNumber}";
}
else
{
    buildInfoText = "Not Cloud Build";
}

ちなみにUnity Cloud Buildでビルドしていない場合、たとえばローカルのUnity Editorで実行した場合、BuildManifest.Load()はnullを返します。

BuildManifestクラスが持っているメンバーは次の通りです。

  • ScmCommitId: Unity Cloud Build によってビルドされた commit、または changelist
  • ScmBranch: ビルドされたブランチ名
  • BuildNumber: このビルドに関連する Unity Cloud Build 番号
  • BuildStartTime: ビルドプロセスが始まったときの UTC timestamp
  • ProjectId: Unity Cloud Build プロジェクト識別子
  • BundleId: (iOS/Androidのみ) bundleIdentifier は Unity Cloud Build 内で設定されます
  • UnityVersion: Unity Cloud Build がビルド作成に使用した Unity のバージョン
  • XcodeVersion: (iOS のみ) ビルドに使用される XCode のバージョン
  • CloudBuildTargetName: ビルドされたプロジェクトビルドターゲットの名前。

CloudBuildManifestの内部のこと

内部がどのようになっているかを説明します。Unity Cloud Buildを行うと、Assets/UnityCloud/Resources以下にUnityCloudBuildManifest.jsonというJSON形式のテキストファイルが自動で置かれます。この生成されるJSON(CloudBuildManifest)の要素には、次のようなビルドしたコミットのリビジョン、ビルドに使ったUnityやXcodeのバージョン、ビルド設定であるビルドターゲット名が入ります。

{
    "scmCommitId":"abcdefghijklmnopqrstuvwxwz01234567890123",
    "scmBranch":"master",
    "buildNumber":"3",
    "buildStartTime":"1/1/2017 11:11:11 PM",
    "projectId":"cloud_build_example",
    "bundleId":"com.teammurosta.cloud_build_example",
    "unityVersion":"5.5.0f3",
    "xcodeVersion":"6.3.1",
    "cloudBuildTargetName":"default-ios",
}

そのAssets/UnityCloud/Resources以下に生成された、ファイルをResourcesクラスを使い読み

まとめ

CloudManifestを使えば、ビルドしたバージョンや設定などのビルド情報をアプリ内で表示することができます。ぜひ、Unity Cloud Buildを使ってみてください!

そして気に入ったら、GitHubのCloudManifestリポジトリにStarをください!テンション・モチベーションが上がります!

補足

この記事は、以下の自分の記事を再構成・合成し、編集・加筆したものです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?