CloudBuildManifest.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using System;
  2. using UnityEngine;
  3. namespace Artees.UnitySemVer
  4. {
  5. /// <summary>
  6. /// A parsed <a href="https://docs.unity3d.com/Manual/UnityCloudBuildManifest.html">Unity Cloud Build manifest</a>.
  7. /// </summary>
  8. internal class CloudBuildManifest
  9. {
  10. private static CloudBuildManifest _instance;
  11. public static CloudBuildManifest Instance => _instance ?? (_instance = new CloudBuildManifest());
  12. /// <summary>
  13. /// Returns true if the manifest has been successfully loaded.
  14. /// </summary>
  15. public readonly bool IsLoaded;
  16. /// <summary>
  17. /// The Unity Cloud Build “build number” corresponding to this build.
  18. /// </summary>
  19. public readonly int BuildNumber;
  20. private CloudBuildManifest()
  21. {
  22. var manifestAsset = Resources.Load<TextAsset>("UnityCloudBuildManifest.json");
  23. if (manifestAsset == null) return;
  24. var manifest = manifestAsset.text;
  25. IsLoaded = true;
  26. const string key = "\"buildNumber\"";
  27. const StringComparison comparison = StringComparison.Ordinal;
  28. var keyStart = manifest.IndexOf(key, comparison);
  29. var valueStart = manifest.IndexOf("\"", keyStart + key.Length, comparison) + 1;
  30. var valueEnd = manifest.IndexOf("\"", valueStart, comparison);
  31. var buildNumber = manifest.Substring(valueStart, valueEnd - valueStart);
  32. int.TryParse(buildNumber, out BuildNumber);
  33. }
  34. }
  35. }