using System.Collections.Generic; using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; using UnityEngine; namespace JustTrack { /// /// A Unity build preprocessor that validates the justtrack SDK configuration before building. /// public class ValidationPreProcessor : IPreprocessBuildWithReport { /// /// Gets the callback order for this build preprocessor. /// #pragma warning disable SA1300 // Element should begin with an uppercase letter (interface requirement) public int callbackOrder #pragma warning restore SA1300 { get { return 0; } } /// /// Called before the build process starts to validate the justtrack SDK configuration. /// /// The build report containing build information. public void OnPreprocessBuild(BuildReport report) { JustTrackUtils.ValidationResult validateResult; validateResult.Warnings = new List(); validateResult.Errors = new List(); var settings = JustTrackUtils.GetSettings(); if (settings == null) { throw new BuildFailedException("justtrack SDK configuration was not found"); } // When the runtime constructor is used, the SDK is not configured via the settings asset, // so there is nothing to validate at build time. if (settings.UseRuntimeConstructor) { return; } JustTrackUtils.ValidationMode mode = JustTrackUtils.ValidationMode.ValidateAll; var buildTarget = report.summary.platform; if (buildTarget == BuildTarget.Android) { mode = JustTrackUtils.ValidationMode.ValidateAndroid; } else if (buildTarget == BuildTarget.iOS) { mode = JustTrackUtils.ValidationMode.ValidateIOS; } var steps = JustTrackUtils.ValidateAsync(settings, mode, (result) => { validateResult = result; }); while (steps.MoveNext()) { // wait } foreach (string error in validateResult.Errors) { Debug.LogError(error); } foreach (string warning in validateResult.Warnings) { Debug.LogWarning(warning); } if (validateResult.Errors.Count > 0) { throw new BuildFailedException("justtrack SDK configuration is not valid"); } } } }