/** * Copyright(c) Live2D Inc. All rights reserved. * * Use of this source code is governed by the Live2D Open Software license * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. */ using System.Linq; using System.Text.RegularExpressions; using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; namespace Live2D.Cubism.Plugins.Editor { /// /// Configure iOS plugins before the build. /// public class CubismiOSPluginProcessor : IPreprocessBuildWithReport { /// /// Execution order. /// public int callbackOrder { get { return 0; } } /// /// Enable the appropriate plugins from the SDK Type and SDK Version in the iOS Build Target before building. /// public void OnPreprocessBuild(BuildReport report) { // Skip the process if the build is not for iOS. if (report.summary.platform != BuildTarget.iOS) { return; } // Detect the type of iOS plugin by SDK type and SDK version in the build settings. CubismiOSPlugin targetPlugin; #if UNITY_2021_2_OR_NEWER if (EditorUserBuildSettings.iOSXcodeBuildConfig == XcodeBuildConfig.Debug) #else if (EditorUserBuildSettings.iOSBuildConfigType == iOSBuildType.Debug) #endif { targetPlugin = PlayerSettings.iOS.sdkVersion == iOSSdkVersion.DeviceSDK ? CubismiOSPlugin.DebugIphoneos : CubismiOSPlugin.DebugIphoneSimulator; } else { targetPlugin = PlayerSettings.iOS.sdkVersion == iOSSdkVersion.DeviceSDK ? CubismiOSPlugin.ReleaseIphoneos : CubismiOSPlugin.ReleaseIphoneSimulator; } // Extract the Cubism iOS plugin from the plugin. var pluginImporters = PluginImporter.GetAllImporters() .Where(pluginImporter => Regex.IsMatch( pluginImporter.assetPath, @"^.*/iOS/.*/libLive2DCubismCore.a$" ) ) .ToArray(); // Enable only the appropriate plugins. foreach (var pluginImporter in pluginImporters) { pluginImporter.SetCompatibleWithPlatform( BuildTarget.iOS, pluginImporter.assetPath.Contains(targetPlugin.DirectoryName) ); } } /// /// Defines the type of plugin for iOS. /// private class CubismiOSPlugin { public readonly string DirectoryName; public static CubismiOSPlugin DebugIphoneos { get { return new CubismiOSPlugin("Debug-iphoneos"); } } public static CubismiOSPlugin DebugIphoneSimulator { get { return new CubismiOSPlugin("Debug-iphonesimulator"); } } public static CubismiOSPlugin ReleaseIphoneos { get { return new CubismiOSPlugin("Release-iphoneos"); } } public static CubismiOSPlugin ReleaseIphoneSimulator { get { return new CubismiOSPlugin("Release-iphonesimulator"); } } private CubismiOSPlugin(string directoryName) { DirectoryName = directoryName; } } } }