void SetIconsForPlatform(BuildTargetGroup targetGroup, PlatformIcon[] icons, PlatformIconKind kind, ref BuildTargetIcons[] allIcons)
        {
            var namedBuildTarget     = NamedBuildTarget.FromBuildTargetGroup(targetGroup);
            var platformIconProvider = PlayerSettings.GetPlatformIconProvider(namedBuildTarget);

            if (platformIconProvider == null)
            {
                return;
            }


            if (m_RequiredIcons == null)
            {
                m_RequiredIcons = new Dictionary <PlatformIconKind, PlatformIcon[]>();
            }
            if (!m_RequiredIcons.ContainsKey(kind))
            {
                var requiredIcons = platformIconProvider.GetRequiredPlatformIcons();
                foreach (var requiredIcon in requiredIcons)
                {
                    if (!m_RequiredIcons.ContainsKey(requiredIcon.Key))
                    {
                        m_RequiredIcons.Add(requiredIcon.Key, requiredIcon.Value);
                    }
                }
            }

            var requiredIconCount = PlatformIcon.GetRequiredPlatformIconsByType(platformIconProvider, kind, m_RequiredIcons).Length;

            PlatformIconStruct[] iconStructs;
            if (icons == null)
            {
                iconStructs = new PlatformIconStruct[0];
            }
            else if (requiredIconCount != icons.Length)
            {
                throw new InvalidOperationException($"Attempting to set an incorrect number of icons for {namedBuildTarget} {kind} kind, it requires {requiredIconCount} icons but trying to assign {icons.Length}.");
            }
            else
            {
                iconStructs = icons.Select(
                    i => i.GetPlatformIconStruct()
                    ).ToArray <PlatformIconStruct>();
            }

            allIcons = PlayerSettings.SetIconsForPlatformForTargetIcons(namedBuildTarget.TargetName, iconStructs, kind.kind, allIcons);
        }
        internal PlatformIcon[] GetPlatformIcons(BuildTargetGroup platform, PlatformIconKind kind, ref BuildTargetIcons[] allIcons)
        {
            var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(platform);
            var serializedIcons  = PlayerSettings.GetPlatformIconsFromTargetIcons(namedBuildTarget.TargetName, kind.kind, allIcons);
            var provider         = PlayerSettings.GetPlatformIconProvider(namedBuildTarget);

            if (m_RequiredIcons == null)
            {
                m_RequiredIcons = new Dictionary <PlatformIconKind, PlatformIcon[]>();
            }
            if (!m_RequiredIcons.ContainsKey(kind))
            {
                var requiredIcons = provider.GetRequiredPlatformIcons();
                foreach (var requiredIcon in requiredIcons)
                {
                    if (!m_RequiredIcons.ContainsKey(requiredIcon.Key))
                    {
                        m_RequiredIcons.Add(requiredIcon.Key, requiredIcon.Value);
                    }
                }
            }

            var icons = PlatformIcon.GetRequiredPlatformIconsByType(provider, kind, m_RequiredIcons);

            if (serializedIcons.Length <= 0)
            {
                // Map legacy icons to required icons
                ImportLegacyIcons(namedBuildTarget.TargetName, kind, icons, m_AllLegacyIcons);
                // Serialize required icons
                SetPlatformIcons(platform, kind, icons, ref allIcons);

                foreach (var icon in icons)
                {
                    if (icon.IsEmpty())
                    {
                        icon.SetTextures(null);
                    }
                }
            }
            else
            {
                // Map serialized icons to required icons
                icons = PlayerSettings.GetPlatformIconsFromStruct(icons, kind, serializedIcons.ToArray());
            }

            return(icons);
        }