#if UNITY_EDITOR && !CT_DJ && (UNITY_WSA || CT_DEVELOP) using UnityEngine; using UnityEditor; using UnityEditor.Callbacks; using Enumerable = System.Linq.Enumerable; using Crosstales.FB.EditorUtil; namespace Crosstales.FB.EditorBuild { /// Post processor for UWP (WSA). public static class UWPPostProcessor { [PostProcessBuild(1)] public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) { if (EditorHelper.isWSAPlatform && EditorConfig.WSA_MODIFY_MANIFEST) { string file = $"{pathToBuiltProject}/{Application.productName}/Package.appxmanifest"; //Debug.Log($"File: {file}"); System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.Load(file); if (!Enumerable.Any(Enumerable.Cast(xmlDoc.DocumentElement.Attributes), child => child.Name.CTEquals("xmlns:rescap"))) { xmlDoc.DocumentElement.SetAttribute("xmlns:rescap", "http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"); xmlDoc.DocumentElement.SetAttribute("IgnorableNamespaces", "uap uap2 uap3 uap4 mp mobile iot rescap"); } System.Xml.XmlNode capabilities = Enumerable.FirstOrDefault(Enumerable.Cast(xmlDoc.DocumentElement.ChildNodes), child => child.Name.CTEquals("Capabilities")); if (capabilities == null) { capabilities = xmlDoc.CreateElement("Capabilities"); xmlDoc.DocumentElement.AppendChild(capabilities); } if (capabilities == null || !Enumerable.Any(Enumerable.Cast(capabilities.ChildNodes), child => child.Name.CTEquals("rescap:Capability"))) { System.Xml.XmlElement capabilityBfsa = xmlDoc.CreateElement("rescap", "Capability", ""); capabilityBfsa.SetAttribute("Name", "broadFileSystemAccess"); capabilities.AppendChild(capabilityBfsa); System.Xml.XmlElement capabilityClose = xmlDoc.CreateElement("rescap", "Capability", ""); capabilityClose.SetAttribute("Name", "confirmAppClose"); capabilities.AppendChild(capabilityClose); System.Xml.XmlElement capabilityRemoveableStorage = xmlDoc.CreateElement("uap", "Capability", ""); capabilityClose.SetAttribute("Name", "removableStorage"); capabilities.AppendChild(capabilityRemoveableStorage); } xmlDoc.Save(file); //TODO dirty hack, improve in the future! string content = Crosstales.Common.Util.FileHelper.ReadAllText(file); content = content.Replace("", ""); content = content.Replace("", ""); content = content.Replace("", ""); content = content.Replace("", ""); Crosstales.Common.Util.FileHelper.WriteAllText(file, content); } } } } #endif // © 2021-2023 crosstales LLC (https://www.crosstales.com)