ATPostProcessBuildiOS.cs 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #if UNITY_IOS || UNITY_IPHONE
  2. using AnyThink.Scripts.IntegrationManager.Editor;
  3. #if UNITY_2019_3_OR_NEWER
  4. using UnityEditor.iOS.Xcode.Extensions;
  5. #endif
  6. using UnityEngine.Networking;
  7. using System;
  8. using System.Linq;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using UnityEditor;
  12. using UnityEditor.Callbacks;
  13. using UnityEditor.iOS.Xcode;
  14. using UnityEngine;
  15. namespace AnyThink.Scripts.Editor
  16. {
  17. [Serializable]
  18. public class SkAdNetworkData
  19. {
  20. [SerializeField] public string[] SkAdNetworkIds;
  21. }
  22. public class TopOnPostProcessBuildiOS
  23. {
  24. private static string mBuildPath;
  25. private static readonly List<string> AtsRequiringNetworks = new List<string>
  26. {
  27. "AdColony",
  28. "ByteDance",
  29. "Fyber",
  30. "Google",
  31. "GoogleAdManager",
  32. "HyprMX",
  33. "InMobi",
  34. "IronSource",
  35. "Smaato"
  36. };
  37. private static List<string> DynamicLibraryPathsToEmbed
  38. {
  39. get
  40. {
  41. var dynamicLibraryPathsToEmbed = new List<string>();
  42. dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "KSAdSDK/KSAdSDK.xcframework"));
  43. dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "StartAppSDK/StartApp.xcframework"));
  44. dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "BigoADS/BigoADS/BigoADS.xcframework"));
  45. dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "BigoADS/BigoADS/OMSDK_Bigosg.xcframework"));
  46. dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "Fyber_Marketplace_SDK/IASDKCore/IASDKCore.xcframework"));
  47. dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "InMobiSDK/InMobiSDK.xcframework"));
  48. dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "GDTMobSDK/GDTFramework/GDTMobSDK.xcframework"));
  49. dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "GDTMobSDK/GDTFramework/Tquic.xcframework"));
  50. //pubnative
  51. dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "ATOM-Standalone/ATOM.xcframework"));
  52. string pubNativePath = Path.Combine(mBuildPath, "Pods/HyBid/PubnativeLite/PubnativeLite");
  53. if (Directory.Exists(pubNativePath)) {
  54. // 获取所有以"OMSDK-"开头的子目录
  55. string[] subDirectories = Directory.GetDirectories(pubNativePath, "OMSDK-*");
  56. if (subDirectories.Length > 0) {
  57. string versionDirectory= subDirectories[0];
  58. string versionDirectoryName = Path.GetFileName(versionDirectory);
  59. // ATLog.logError("DynamicLibraryPathsToEmbed() >>> pubNative versionDirectoryName: " + versionDirectoryName);
  60. dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "HyBid/PubnativeLite/PubnativeLite/" + versionDirectoryName + "/OMSDK_Pubnativenet.xcframework"));
  61. }
  62. }
  63. //applovin
  64. string applovinPath = Path.Combine(mBuildPath, "Pods/AppLovinSDK");
  65. if (Directory.Exists(applovinPath)) {
  66. // 获取所有以"applovin-ios-sdk-"开头的子目录
  67. string[] applovinSubDirectories = Directory.GetDirectories(applovinPath, "applovin-ios-sdk-*");
  68. if (applovinSubDirectories.Length > 0) {
  69. string applovinVersionDirectory = applovinSubDirectories[0];
  70. string applovinVersionDirectoryName = Path.GetFileName(applovinVersionDirectory);
  71. // ATLog.logError("DynamicLibraryPathsToEmbed() >>> applovinVersionDirectoryName: " + applovinVersionDirectoryName);
  72. dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "AppLovinSDK/" + applovinVersionDirectoryName + "/AppLovinSDK.xcframework"));
  73. }
  74. }
  75. return dynamicLibraryPathsToEmbed;
  76. }
  77. }
  78. //读取本地已安装network的版本号:network_data.json
  79. // private static string getNetworkVersion(string networkDataJsonFilePath)
  80. // {
  81. // if (!File.Exists(networkDataJsonFilePath)) {
  82. // return "";
  83. // }
  84. // string jsonData = File.ReadAllText(networkDataJsonFilePath);
  85. // var networkLocalData = JsonUtility.FromJson<NetworkLocalData>(a_json);
  86. // if (networkLocalData != null) {
  87. // return networkLocalData.version;
  88. // }
  89. // retrun "";
  90. // }
  91. private static List<string> BunldePathsToAdd {
  92. get {
  93. var bunldePathsToAdd = new List<string>();
  94. bunldePathsToAdd.Add(Path.Combine("Pods/", "BigoADS/BigoADS/BigoADSRes.bundle"));
  95. bunldePathsToAdd.Add(Path.Combine("Pods/", "Ads-Global/SDK/PAGAdSDK.bundle"));
  96. bunldePathsToAdd.Add(Path.Combine("Pods/", "Ads-CN/SDK/CSJAdSDK.bundle"));
  97. return bunldePathsToAdd;
  98. }
  99. }
  100. private static readonly List<string> SwiftLanguageNetworks = new List<string>
  101. {
  102. "MoPub"
  103. };
  104. private static readonly List<string> EmbedSwiftStandardLibrariesNetworks = new List<string>
  105. {
  106. "Facebook",
  107. "MoPub"
  108. };
  109. [PostProcessBuildAttribute(int.MaxValue)]
  110. public static void TopOnPostProcessPbxProject(BuildTarget buildTarget, string buildPath)
  111. {
  112. var projectPath = PBXProject.GetPBXProjectPath(buildPath);
  113. var project = new PBXProject();
  114. project.ReadFromFile(projectPath);
  115. #if UNITY_2019_3_OR_NEWER
  116. var unityMainTargetGuid = project.GetUnityMainTargetGuid();
  117. var unityFrameworkTargetGuid = project.GetUnityFrameworkTargetGuid();
  118. #else
  119. var unityMainTargetGuid = project.TargetGuidByName(UnityMainTargetName);
  120. var unityFrameworkTargetGuid = project.TargetGuidByName(UnityMainTargetName);
  121. #endif
  122. project.SetBuildProperty(unityMainTargetGuid, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES");
  123. project.SetBuildProperty(unityMainTargetGuid, "ENABLE_BITCODE", "NO");
  124. project.SetBuildProperty(unityFrameworkTargetGuid, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES");
  125. project.SetBuildProperty(unityFrameworkTargetGuid, "ENABLE_BITCODE", "NO");
  126. EmbedDynamicLibrariesIfNeeded(buildPath, project, unityMainTargetGuid);
  127. AddBunleIfNeeded(buildPath, project, unityMainTargetGuid);
  128. project.WriteToFile(projectPath);
  129. }
  130. [PostProcessBuildAttribute(int.MaxValue)]
  131. public static void TopOnPostProcessPlist(BuildTarget buildTarget, string path)
  132. {
  133. var plistPath = Path.Combine(path, "Info.plist");
  134. var plist = new PlistDocument();
  135. plist.ReadFromFile(plistPath);
  136. #if UNITY_2018_2_OR_NEWER
  137. AddGoogleApplicationIdIfNeeded(plist);
  138. #endif
  139. plist.WriteToFile(plistPath);
  140. }
  141. private static void AddBunleIfNeeded(string buildPath, PBXProject project, string targetGuid)
  142. {
  143. var bunldePathsPresentInProject = BunldePathsToAdd.Where(bunldePath => Directory.Exists(Path.Combine(buildPath, bunldePath))).ToList();
  144. if (bunldePathsPresentInProject.Count <= 0) return;
  145. ATLog.log("AddBunleIfNeeded");
  146. #if UNITY_2019_3_OR_NEWER
  147. foreach (var bunldePath in bunldePathsPresentInProject)
  148. {
  149. var fileGuid = project.AddFile(bunldePath, bunldePath, PBXSourceTree.Source);
  150. project.AddFileToBuild(targetGuid, fileGuid);
  151. }
  152. #endif
  153. }
  154. private static void EmbedDynamicLibrariesIfNeeded(string buildPath, PBXProject project, string targetGuid)
  155. {
  156. mBuildPath = buildPath;
  157. ATLog.log("EmbedDynamicLibrariesIfNeeded() >>> buildPath: " + buildPath);
  158. var dynamicLibraryPathsPresentInProject = DynamicLibraryPathsToEmbed.Where(dynamicLibraryPath => Directory.Exists(Path.Combine(buildPath, dynamicLibraryPath))).ToList();
  159. if (dynamicLibraryPathsPresentInProject.Count <= 0) return;
  160. #if UNITY_2019_3_OR_NEWER
  161. foreach (var dynamicLibraryPath in dynamicLibraryPathsPresentInProject)
  162. {
  163. var fileGuid = project.AddFile(dynamicLibraryPath, dynamicLibraryPath);
  164. project.AddFileToEmbedFrameworks(targetGuid, fileGuid);
  165. }
  166. #else
  167. string runpathSearchPaths;
  168. #if UNITY_2018_2_OR_NEWER
  169. runpathSearchPaths = project.GetBuildPropertyForAnyConfig(targetGuid, "LD_RUNPATH_SEARCH_PATHS");
  170. #else
  171. runpathSearchPaths = "$(inherited)";
  172. #endif
  173. runpathSearchPaths += string.IsNullOrEmpty(runpathSearchPaths) ? "" : " ";
  174. // Check if runtime search paths already contains the required search paths for dynamic libraries.
  175. if (runpathSearchPaths.Contains("@executable_path/Frameworks")) return;
  176. runpathSearchPaths += "@executable_path/Frameworks";
  177. project.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", runpathSearchPaths);
  178. #endif
  179. }
  180. #if UNITY_2018_2_OR_NEWER
  181. private static void AddGoogleApplicationIdIfNeeded(PlistDocument plist)
  182. {
  183. if (!ATConfig.isNetworkInstalledByName("Admob", ATConfig.OS_IOS))
  184. {
  185. ATLog.log("addGoogleApplicationIdIfNeeded() >>> Admob not install.");
  186. return;
  187. }
  188. //获取admob app id
  189. var appId = ATConfig.getAdmobAppIdByOs(ATConfig.OS_IOS);
  190. if (string.IsNullOrEmpty(appId) || !appId.StartsWith("ca-app-pub-"))
  191. {
  192. ATLog.logError("AdMob App ID is not set. Please enter a valid app ID within the AnyThink Integration Manager window.");
  193. return;
  194. }
  195. const string googleApplicationIdentifier = "GADApplicationIdentifier";
  196. plist.root.SetString(googleApplicationIdentifier, appId);
  197. }
  198. #endif
  199. }
  200. }
  201. #endif