Skip to content

Commit

Permalink
Merge pull request #277 from immutable/chore/build-script-mac
Browse files Browse the repository at this point in the history
[DX-3098] chore: mac build script to build without alttester
  • Loading branch information
nattb8 authored Aug 13, 2024
2 parents 52f8664 + 749c26c commit 90b1deb
Showing 1 changed file with 90 additions and 18 deletions.
108 changes: 90 additions & 18 deletions sample/Assets/Editor/MacBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,120 @@

using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
using AltTester.AltTesterUnitySDK.Editor;
using AltTester.AltTesterUnitySDK;
using System;

public class BuildScript
public class MacBuilder
{
private const string DefaultBuildPath = "Builds/MacOS/SampleApp.app";

static void Build()
{
BuildPlayer(DefaultBuildPath, BuildOptions.None);
}

static void BuildForAltTester()
{
BuildPlayer(DefaultBuildPath, BuildOptions.Development | BuildOptions.IncludeTestAssemblies | BuildOptions.AutoRunPlayer, true);
}

private static void BuildPlayer(string defaultBuildPath, BuildOptions buildOptions, bool setupForAltTester = false)
{
try
{
BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
buildPlayerOptions.scenes = new string[] {
string buildPath = GetBuildPathFromArgs(defaultBuildPath);
BuildPlayerOptions buildPlayerOptions = CreateBuildPlayerOptions(buildPath, buildOptions);

if (setupForAltTester)
{
SetupAltTester(buildPlayerOptions);
}

var results = BuildPipeline.BuildPlayer(buildPlayerOptions);

if (setupForAltTester)
{
// Clean up AltTester settings after build
AltBuilder.RemoveAltTesterFromScriptingDefineSymbols(BuildTargetGroup.Standalone);
RemoveAltFromScene(buildPlayerOptions.scenes[0]);
}
}
catch (Exception exception)
{
Debug.LogException(exception);
}
}

private static string GetBuildPathFromArgs(string defaultBuildPath)
{
string[] args = Environment.GetCommandLineArgs();
for (int i = 0; i < args.Length; i++)
{
if (args[i] == "--buildPath" && i + 1 < args.Length)
{
return args[i + 1];
}
}
return defaultBuildPath;
}

private static BuildPlayerOptions CreateBuildPlayerOptions(string buildPath, BuildOptions buildOptions)
{
return new BuildPlayerOptions
{
scenes = new[]
{
"Assets/Scenes/SelectAuthMethod.unity",
"Assets/Scenes/UnauthenticatedScene.unity",
"Assets/Scenes/AuthenticatedScene.unity",
"Assets/Scenes/ZkEvmGetBalance.unity",
"Assets/Scenes/ZkEvmGetTransactionReceipt.unity",
"Assets/Scenes/ZkEvmSendTransaction.unity",
"Assets/Scenes/ImxNftTransfer.unity"
};
},
locationPathName = buildPath,
target = BuildTarget.StandaloneOSX,
options = buildOptions
};
}

buildPlayerOptions.locationPathName = "Builds/MacOS/SampleApp.app";
buildPlayerOptions.target = BuildTarget.StandaloneOSX;
buildPlayerOptions.options = BuildOptions.Development | BuildOptions.IncludeTestAssemblies | BuildOptions.AutoRunPlayer;
private static void SetupAltTester(BuildPlayerOptions buildPlayerOptions)
{
AltBuilder.AddAltTesterInScriptingDefineSymbolsGroup(BuildTargetGroup.Standalone);
AltBuilder.CreateJsonFileForInputMappingOfAxis();

// Setup for AltTester
var buildTargetGroup = BuildTargetGroup.Standalone;
AltBuilder.AddAltTesterInScriptingDefineSymbolsGroup(buildTargetGroup);
if (buildTargetGroup == UnityEditor.BuildTargetGroup.Standalone)
AltBuilder.CreateJsonFileForInputMappingOfAxis();
var instrumentationSettings = new AltInstrumentationSettings();
AltBuilder.InsertAltInScene(buildPlayerOptions.scenes[0], instrumentationSettings);
var instrumentationSettings = new AltInstrumentationSettings();
AltBuilder.InsertAltInScene(buildPlayerOptions.scenes[0], instrumentationSettings);
}

var results = BuildPipeline.BuildPlayer(buildPlayerOptions);
AltBuilder.RemoveAltTesterFromScriptingDefineSymbols(BuildTargetGroup.Standalone);
public static void RemoveAltFromScene(string scene)
{
Debug.Log("Removing AltTesterPrefab from the [" + scene + "] scene.");

var sceneToModify = EditorSceneManager.OpenScene(scene);

// Find the AltTesterPrefab instance in the scene
var altRunner = GameObject.FindObjectOfType<AltRunner>();

if (altRunner != null)
{
// Destroy the AltTesterPrefab instance
GameObject.DestroyImmediate(altRunner.gameObject);

// Mark the scene as dirty and save it
EditorSceneManager.MarkSceneDirty(sceneToModify);
EditorSceneManager.SaveOpenScenes();

Debug.Log("AltTesterPrefab successfully removed from the [" + scene + "] scene.");
}
catch (Exception exception)
else
{
Debug.LogException(exception);
Debug.LogWarning("AltTesterPrefab was not found in the [" + scene + "] scene.");
}
}

}

#endif

0 comments on commit 90b1deb

Please sign in to comment.