CubismiOSPluginProcessor.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /**
  2. * Copyright(c) Live2D Inc. All rights reserved.
  3. *
  4. * Use of this source code is governed by the Live2D Open Software license
  5. * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
  6. */
  7. using System.Linq;
  8. using System.Text.RegularExpressions;
  9. using UnityEditor;
  10. using UnityEditor.Build;
  11. using UnityEditor.Build.Reporting;
  12. namespace Live2D.Cubism.Plugins.Editor
  13. {
  14. /// <summary>
  15. /// Configure iOS plugins before the build.
  16. /// </summary>
  17. public class CubismiOSPluginProcessor : IPreprocessBuildWithReport
  18. {
  19. /// <summary>
  20. /// Execution order.
  21. /// </summary>
  22. public int callbackOrder
  23. {
  24. get { return 0; }
  25. }
  26. /// <summary>
  27. /// Enable the appropriate plugins from the SDK Type and SDK Version in the iOS Build Target before building.
  28. /// </summary>
  29. public void OnPreprocessBuild(BuildReport report)
  30. {
  31. // Skip the process if the build is not for iOS.
  32. if (report.summary.platform != BuildTarget.iOS)
  33. {
  34. return;
  35. }
  36. // Detect the type of iOS plugin by SDK type and SDK version in the build settings.
  37. CubismiOSPlugin targetPlugin;
  38. #if UNITY_2021_2_OR_NEWER
  39. if (EditorUserBuildSettings.iOSXcodeBuildConfig == XcodeBuildConfig.Debug)
  40. #else
  41. if (EditorUserBuildSettings.iOSBuildConfigType == iOSBuildType.Debug)
  42. #endif
  43. {
  44. targetPlugin = PlayerSettings.iOS.sdkVersion == iOSSdkVersion.DeviceSDK
  45. ? CubismiOSPlugin.DebugIphoneos
  46. : CubismiOSPlugin.DebugIphoneSimulator;
  47. }
  48. else
  49. {
  50. targetPlugin = PlayerSettings.iOS.sdkVersion == iOSSdkVersion.DeviceSDK
  51. ? CubismiOSPlugin.ReleaseIphoneos
  52. : CubismiOSPlugin.ReleaseIphoneSimulator;
  53. }
  54. // Extract the Cubism iOS plugin from the plugin.
  55. var pluginImporters = PluginImporter.GetAllImporters()
  56. .Where(pluginImporter =>
  57. Regex.IsMatch(
  58. pluginImporter.assetPath,
  59. @"^.*/iOS/.*/libLive2DCubismCore.a$"
  60. )
  61. )
  62. .ToArray();
  63. // Enable only the appropriate plugins.
  64. foreach (var pluginImporter in pluginImporters)
  65. {
  66. pluginImporter.SetCompatibleWithPlatform(
  67. BuildTarget.iOS,
  68. pluginImporter.assetPath.Contains(targetPlugin.DirectoryName)
  69. );
  70. }
  71. }
  72. /// <summary>
  73. /// Defines the type of plugin for iOS.
  74. /// </summary>
  75. private class CubismiOSPlugin
  76. {
  77. public readonly string DirectoryName;
  78. public static CubismiOSPlugin DebugIphoneos
  79. {
  80. get { return new CubismiOSPlugin("Debug-iphoneos"); }
  81. }
  82. public static CubismiOSPlugin DebugIphoneSimulator
  83. {
  84. get { return new CubismiOSPlugin("Debug-iphonesimulator"); }
  85. }
  86. public static CubismiOSPlugin ReleaseIphoneos
  87. {
  88. get { return new CubismiOSPlugin("Release-iphoneos"); }
  89. }
  90. public static CubismiOSPlugin ReleaseIphoneSimulator
  91. {
  92. get { return new CubismiOSPlugin("Release-iphonesimulator"); }
  93. }
  94. private CubismiOSPlugin(string directoryName)
  95. {
  96. DirectoryName = directoryName;
  97. }
  98. }
  99. }
  100. }