기술 자료

지원

런타임 중에 Build Automation의 빌드 매니페스트 사용

Access build manifest data at runtime for analytics and bug reporting in Unity Build Automation.
읽는 시간 1분최근 업데이트: 한 달 전

게임의 런타임 코드에 빌드 자체에 대한 주요 정보가 포함되어 있는 경우가 많습니다. 빌드의 이름과 번호와 같은 정보는 버그를 보고하거나 분석을 트래킹할 때 매우 유용합니다. Build Automation은 이를 용이하게 하기 위해 빌드 시 게임에 매니페스트를 삽입하여 이 주요 데이터를 런타임 시점에 나중에 액세스할 수 있도록 합니다. Build Automation은 매니페스트를 JSON으로 포맷이 지정된
TextAsset
으로 제공합니다. Build Automation은 매니페스트를
Resources.Load()
를 통해 액세스할 수 있는 게임 리소스로 저장합니다. 빌드 매니페스트에는 다음의 값이 포함되어 있습니다.

프로퍼티

scmCommitId
빌드된 커밋이나 changelist입니다.
scmBranch
빌드된 브랜치의 이름입니다.
buildNumber
이 빌드에 해당하는 Build Automation 빌드 번호입니다.
buildStartTime
빌드 프로세스가 시작된 시점의 UTC 타임스탬프입니다.
projectId
Unity 프로젝트 식별자입니다.
bundleId
Build Automation에서 설정된
bundleIdentifier
입니다(iOS와 Android만 해당).
unityVersion
Build Automation에서 빌드가 생성되는 데 사용한 Unity 버전입니다.
xcodeVersion
프로젝트를 빌드하는 데 사용된 Xcode 버전입니다(iOS만 해당).
cloudBuildTargetName
빌드된 빌드 타겟의 이름입니다.
UnityCloudBuildManifest.json이라는 TextAsset 매니페스트는
Assets/UnityCloud/Resources
폴더에 작성됩니다.

로컬 테스트의 경우

빌드 매니페스트 기능을 로컬에서 테스트하려면
UnityCloudBuildManifest.json.txt
파일의 이름을 지정합니다. 이 파일은 Build Automation 매니페스트 파일에 간섭을 일으킬 수 있으므로 코드 저장소에 있는 프로젝트의 Assets/UnityCloud/Resources 폴더에 커밋하면 안 됩니다.

매니페스트 사용

런타임 시 다음을 통해 매니페스트에 액세스할 수 있습니다.

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로 매니페스트 빌드

BuildManifestObject
ScriptableObject
이며, 수동으로
UnityCloudBuildManifest.json
TextAsset을 로드할 필요 없이 스크립트를 통해 빌드 매니페스트의 값에 액세스하는 데 사용할 수 있습니다.
BuildManifestObject
는 Build Automation에서 호출하는 사전 익스포트의 선택 사항 파라미터입니다(
UnityCloudBuildManifest.json
TextAsset이 작성되지 않은 경우). 자세한 내용은 JSON으로 매니페스트를 참고하십시오.
다음 예제 C# 코드는 매니페스트에 제공된
buildNumber
에 따라
PlayerSettings
bundleVersion
을 업데이트하는 사전 익스포트 메서드를 보여 줍니다. 사전 익스포트 메서드에 대한 자세한 내용은 사전 및 포스트 익스포트 메서드를 참고하십시오.
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}
다음은
BuildManifestObject
클래스의 퍼블릭 인터페이스입니다.
namespace 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(); }}