런타임 중에 Build Automation의 빌드 매니페스트 사용
Access build manifest data at runtime for analytics and bug reporting in Unity Build Automation.
읽는 시간 1분최근 업데이트: 한 달 전
게임의 런타임 코드에 빌드 자체에 대한 주요 정보가 포함되어 있는 경우가 많습니다. 빌드의 이름과 번호와 같은 정보는 버그를 보고하거나 분석을 트래킹할 때 매우 유용합니다. Build Automation은 이를 용이하게 하기 위해 빌드 시 게임에 매니페스트를 삽입하여 이 주요 데이터를 런타임 시점에 나중에 액세스할 수 있도록 합니다. Build Automation은 매니페스트를 JSON으로 포맷이 지정된
TextAssetResources.Load()값 | 프로퍼티 |
|---|---|
| 빌드된 커밋이나 changelist입니다. |
| 빌드된 브랜치의 이름입니다. |
| 이 빌드에 해당하는 Build Automation 빌드 번호입니다. |
| 빌드 프로세스가 시작된 시점의 UTC 타임스탬프입니다. |
| Unity 프로젝트 식별자입니다. |
| Build Automation에서 설정된 |
| Build Automation에서 빌드가 생성되는 데 사용한 Unity 버전입니다. |
| 프로젝트를 빌드하는 데 사용된 Xcode 버전입니다(iOS만 해당). |
| 빌드된 빌드 타겟의 이름입니다. |
Assets/UnityCloud/Resources로컬 테스트의 경우
빌드 매니페스트 기능을 로컬에서 테스트하려면UnityCloudBuildManifest.json.txt매니페스트 사용
런타임 시 다음을 통해 매니페스트에 액세스할 수 있습니다.JSON으로 매니페스트 빌드
런타임 시 JSON으로 Build Automation 매니페스트에 액세스할 수 있습니다. 이 에셋에는 커스텀 파싱 로직이나 타사 JSON 파서 사용이 필요합니다. 다음 C# 코드 예제는 GitHub Gist에서 MiniJSON 파서로 빌드 매니페스트를 로드하고 파싱하는 방법을 보여 줍니다.using UnityEngine;using System.Collections.Generic;using MiniJSON;public class MyGameObject: MonoBehaviour{ void Start() { var manifest = (TextAsset) Resources.Load("UnityCloudBuildManifest.json"); if (manifest != null) { var manifestDict = Json.Deserialize(manifest.text) as Dictionary<string,object>; foreach (var kvp in manifestDict) { // Be sure to check for null values! var value = (kvp.Value != null) ? kvp.Value.ToString() : ""; Debug.Log(string.Format("Key: {0}, Value: {1}", kvp.Key, value)); } } }}
ScriptableObject로 매니페스트 빌드
BuildManifestObjectScriptableObjectUnityCloudBuildManifest.jsonBuildManifestObjectUnityCloudBuildManifest.jsonbuildNumberPlayerSettingsbundleVersion다음은using UnityEngine;using UnityEditor;using System;public class CloudBuildHelper : MonoBehaviour{ #if UNITY_CLOUD_BUILD public static void PreExport(UnityEngine.CloudBuild.BuildManifestObject manifest) { PlayerSettings.bundleVersion = string.Format("1.0.{0}", manifest.GetValue<int>("buildNumber")); } #endif}
BuildManifestObjectnamespace UnityEngine.CloudBuild{ public class BuildManifestObject : ScriptableObject { // Try to get a manifest value - returns true if key was found and could be cast to type T, otherwise returns false. public bool TryGetValue<T>(string key, out T result); // Retrieve a manifest value or throw an exception if the given key isn't found. public T GetValue<T>(string key); // Set the value for a given key. public void SetValue(string key, object value); // Copy values from a dictionary. ToString() will be called on dictionary values before being stored. public void SetValues(Dictionary<string, object> sourceDict); // Remove all key/value pairs. public void ClearValues(); // Return a dictionary that represents the current BuildManifestObject. public Dictionary<string, object> ToDictionary(); // Return a JSON formatted string that represents the current BuildManifestObject public string ToJson(); // Return an INI formatted string that represents the current BuildManifestObject public override string ToString(); }}