in Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs [405:642]
private void AppxBuildGUI()
{
GUILayout.BeginVertical();
// SDK and MS Build Version(and save setting, if it's changed)
string currentSDKVersion = EditorUserBuildSettings.wsaMinUWPSDK;
int currentSDKVersionIndex = -1;
for (var i = 0; i < windowsSdkPaths.Length; i++)
{
if (string.IsNullOrEmpty(currentSDKVersion))
{
currentSDKVersionIndex = windowsSdkPaths.Length - 1;
}
else
{
if (windowsSdkPaths[i].Equals(UwpBuildDeployPreferences.MIN_SDK_VERSION))
{
currentSDKVersionIndex = i;
}
}
}
EditorGUILayout.HelpBox($"Minimum Required SDK Version: {currentSDKVersion}", MessageType.Info);
// Throw exception if user has no Windows 10 SDK installed
if (currentSDKVersionIndex < 0)
{
if (IsValidSdkInstalled)
{
Debug.LogError($"Unable to find the required Windows 10 SDK Target!\nPlease be sure to install the {UwpBuildDeployPreferences.MIN_SDK_VERSION} SDK from Visual Studio Installer.");
}
EditorGUILayout.HelpBox($"Unable to find the required Windows 10 SDK Target!\nPlease be sure to install the {UwpBuildDeployPreferences.MIN_SDK_VERSION} SDK from Visual Studio Installer.", MessageType.Error);
GUILayout.EndVertical();
IsValidSdkInstalled = false;
return;
}
IsValidSdkInstalled = true;
string newSDKVersion = windowsSdkPaths[currentSDKVersionIndex];
if (!newSDKVersion.Equals(currentSDKVersion))
{
EditorUserBuildSettings.wsaMinUWPSDK = newSDKVersion;
}
var curScriptingBackend = PlayerSettings.GetScriptingBackend(BuildTargetGroup.WSA);
if (curScriptingBackend == ScriptingImplementation.WinRTDotNET)
{
EditorGUILayout.HelpBox(".NET Scripting backend is depreciated, please use IL2CPP.", MessageType.Warning);
}
var newScriptingBackend = (ScriptingImplementation)EditorGUILayout.IntPopup("Scripting Backend", (int)curScriptingBackend, scriptingBackendNames, scriptingBackendEnum, GUILayout.Width(HALF_WIDTH));
if (newScriptingBackend != curScriptingBackend)
{
bool canUpdate = !Directory.Exists(BuildDeployPreferences.AbsoluteBuildDirectory);
if (!canUpdate &&
EditorUtility.DisplayDialog("Attention!",
$"Build path contains project built with {newScriptingBackend.ToString()} scripting backend, while current project is using {curScriptingBackend.ToString()} scripting backend.\n\nSwitching to a new scripting backend requires us to delete all the data currently in your build folder and rebuild the Unity Player!",
"Okay", "Cancel"))
{
Directory.Delete(BuildDeployPreferences.AbsoluteBuildDirectory, true);
canUpdate = true;
}
if (canUpdate)
{
PlayerSettings.SetScriptingBackend(BuildTargetGroup.WSA, newScriptingBackend);
}
}
// Build config (and save setting, if it's changed)
string curBuildConfigString = UwpBuildDeployPreferences.BuildConfig;
WSABuildType buildConfigOption;
if (curBuildConfigString.ToLower().Equals("master"))
{
buildConfigOption = WSABuildType.Master;
}
else if (curBuildConfigString.ToLower().Equals("release"))
{
buildConfigOption = WSABuildType.Release;
}
else
{
buildConfigOption = WSABuildType.Debug;
}
buildConfigOption = (WSABuildType)EditorGUILayout.EnumPopup("Build Configuration", buildConfigOption, GUILayout.Width(HALF_WIDTH));
string buildConfigString = buildConfigOption.ToString().ToLower();
if (buildConfigString != curBuildConfigString)
{
UwpBuildDeployPreferences.BuildConfig = buildConfigString;
}
// Build Platform (and save setting, if it's changed)
string currentArchitectureString = EditorUserBuildSettings.wsaArchitecture;
var buildArchitecture = Architecture.x86;
if (currentArchitectureString.ToLower().Equals("x86"))
{
buildArchitecture = Architecture.x86;
}
else if (currentArchitectureString.ToLower().Equals("x64"))
{
buildArchitecture = Architecture.x64;
}
else if (currentArchitectureString.ToLower().Equals("arm"))
{
buildArchitecture = Architecture.ARM;
}
buildArchitecture = (Architecture)EditorGUILayout.EnumPopup("Build Platform", buildArchitecture, GUILayout.Width(HALF_WIDTH));
string newBuildArchitectureString = buildArchitecture.ToString();
if (newBuildArchitectureString != currentArchitectureString)
{
EditorUserBuildSettings.wsaArchitecture = newBuildArchitectureString;
}
GUILayout.BeginHorizontal();
var prevFieldWidth = EditorGUIUtility.fieldWidth;
EditorGUIUtility.fieldWidth = prevFieldWidth;
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
var previousLabelWidth = EditorGUIUtility.labelWidth;
// Auto Increment version
EditorGUIUtility.labelWidth = 96;
bool curIncrementVersion = BuildDeployPreferences.IncrementBuildVersion;
bool newIncrementVersion = EditorGUILayout.Toggle(autoIncrementLabel, curIncrementVersion);
// Restore previous label width
EditorGUIUtility.labelWidth = previousLabelWidth;
if (newIncrementVersion != curIncrementVersion)
{
BuildDeployPreferences.IncrementBuildVersion = newIncrementVersion;
}
EditorGUILayout.LabelField(versionNumberLabel, GUILayout.Width(96));
Vector3 newVersion = Vector3.zero;
EditorGUI.BeginChangeCheck();
newVersion.x = EditorGUILayout.IntField(PlayerSettings.WSA.packageVersion.Major);
newVersion.y = EditorGUILayout.IntField(PlayerSettings.WSA.packageVersion.Minor);
newVersion.z = EditorGUILayout.IntField(PlayerSettings.WSA.packageVersion.Build);
if (EditorGUI.EndChangeCheck())
{
PlayerSettings.WSA.packageVersion = new Version((int)newVersion.x, (int)newVersion.y, (int)newVersion.z, 0);
}
GUI.enabled = false;
EditorGUILayout.IntField(PlayerSettings.WSA.packageVersion.Revision);
GUI.enabled = true;
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
// Open AppX packages location
string appxDirectory = curScriptingBackend == ScriptingImplementation.IL2CPP ? $"/AppPackages/{PlayerSettings.productName}" : $"/{PlayerSettings.productName}/AppPackages";
string appxBuildPath = Path.GetFullPath($"{BuildDeployPreferences.BuildDirectory}{appxDirectory}");
GUI.enabled = Builds.Count > 0 && !string.IsNullOrEmpty(appxBuildPath);
if (GUILayout.Button("Open APPX Packages Location", GUILayout.Width(HALF_WIDTH)))
{
EditorApplication.delayCall += () => Process.Start("explorer.exe", $"/f /open,{appxBuildPath}");
}
GUI.enabled = true;
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
// Force rebuild
previousLabelWidth = EditorGUIUtility.labelWidth;
EditorGUIUtility.labelWidth = 50;
bool curForceRebuildAppx = UwpBuildDeployPreferences.ForceRebuild;
bool newForceRebuildAppx = EditorGUILayout.Toggle("Rebuild", curForceRebuildAppx);
if (newForceRebuildAppx != curForceRebuildAppx)
{
UwpBuildDeployPreferences.ForceRebuild = newForceRebuildAppx;
}
// Restore previous label width
EditorGUIUtility.labelWidth = previousLabelWidth;
if (appxCancellationTokenSource == null)
{
// Build APPX
GUI.enabled = ShouldBuildAppxBeEnabled;
if (GUILayout.Button("Build APPX", GUILayout.Width(HALF_WIDTH)))
{
// Check if solution exists
string slnFilename = Path.Combine(BuildDeployPreferences.BuildDirectory, $"{PlayerSettings.productName}.sln");
if (File.Exists(slnFilename))
{
EditorApplication.delayCall += BuildAppx;
}
else if (EditorUtility.DisplayDialog("Solution Not Found", "We couldn't find the solution. Would you like to Build it?", "Yes, Build", "No"))
{
EditorApplication.delayCall += () => BuildAll(install: false);
}
GUI.enabled = true;
}
}
else
{
if (GUILayout.Button("Cancel Build", GUILayout.Width(HALF_WIDTH)))
{
appxCancellationTokenSource.Cancel();
}
}
GUILayout.EndHorizontal();
GUILayout.EndVertical();
}