235 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			235 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | #if UNITY_IOS || UNITY_IPHONE | |||
|  | 
 | |||
|  | using AnyThink.Scripts.IntegrationManager.Editor; | |||
|  | #if UNITY_2019_3_OR_NEWER | |||
|  | using UnityEditor.iOS.Xcode.Extensions; | |||
|  | #endif | |||
|  | using UnityEngine.Networking; | |||
|  | using System; | |||
|  | using System.Linq; | |||
|  | using System.Collections.Generic; | |||
|  | using System.IO; | |||
|  | using UnityEditor; | |||
|  | using UnityEditor.Callbacks; | |||
|  | using UnityEditor.iOS.Xcode; | |||
|  | using UnityEngine; | |||
|  | 
 | |||
|  | namespace AnyThink.Scripts.Editor | |||
|  | { | |||
|  |     [Serializable] | |||
|  |     public class SkAdNetworkData | |||
|  |     { | |||
|  |         [SerializeField] public string[] SkAdNetworkIds; | |||
|  |     } | |||
|  | 
 | |||
|  |     public class TopOnPostProcessBuildiOS | |||
|  |     { | |||
|  |         private static string mBuildPath; | |||
|  | 
 | |||
|  |         private static readonly List<string> AtsRequiringNetworks = new List<string> | |||
|  |         { | |||
|  |             "AdColony", | |||
|  |             "ByteDance", | |||
|  |             "Fyber", | |||
|  |             "Google", | |||
|  |             "GoogleAdManager", | |||
|  |             "HyprMX", | |||
|  |             "InMobi", | |||
|  |             "IronSource", | |||
|  |             "Smaato" | |||
|  |         }; | |||
|  | 
 | |||
|  |         private static List<string> DynamicLibraryPathsToEmbed | |||
|  |         { | |||
|  |             get | |||
|  |             { | |||
|  |                 var dynamicLibraryPathsToEmbed = new List<string>(); | |||
|  |                 dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "KSAdSDK/KSAdSDK.xcframework")); | |||
|  |                 dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "StartAppSDK/StartApp.xcframework")); | |||
|  |                 dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "BigoADS/BigoADS/BigoADS.xcframework")); | |||
|  |                 dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "BigoADS/BigoADS/OMSDK_Bigosg.xcframework")); | |||
|  |                 dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "Fyber_Marketplace_SDK/IASDKCore/IASDKCore.xcframework")); | |||
|  |                 dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "InMobiSDK/InMobiSDK.xcframework")); | |||
|  |                 dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "GDTMobSDK/GDTFramework/GDTMobSDK.xcframework")); | |||
|  |                 dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "GDTMobSDK/GDTFramework/Tquic.xcframework")); | |||
|  | 
 | |||
|  |                 //pubnative | |||
|  |                 dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "ATOM-Standalone/ATOM.xcframework")); | |||
|  |                 string pubNativePath = Path.Combine(mBuildPath, "Pods/HyBid/PubnativeLite/PubnativeLite"); | |||
|  |                 if (Directory.Exists(pubNativePath)) { | |||
|  |                     // 获取所有以"OMSDK-"开头的子目录 | |||
|  |                     string[] subDirectories = Directory.GetDirectories(pubNativePath, "OMSDK-*"); | |||
|  |                     if (subDirectories.Length > 0) { | |||
|  |                         string versionDirectory= subDirectories[0]; | |||
|  |                         string versionDirectoryName = Path.GetFileName(versionDirectory); | |||
|  |                         // ATLog.logError("DynamicLibraryPathsToEmbed() >>> pubNative versionDirectoryName: " + versionDirectoryName); | |||
|  |                         dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "HyBid/PubnativeLite/PubnativeLite/" + versionDirectoryName + "/OMSDK_Pubnativenet.xcframework")); | |||
|  |                     } | |||
|  |                 } | |||
|  |                 //applovin | |||
|  |                 string applovinPath = Path.Combine(mBuildPath, "Pods/AppLovinSDK"); | |||
|  |                 if (Directory.Exists(applovinPath)) { | |||
|  |                     // 获取所有以"applovin-ios-sdk-"开头的子目录 | |||
|  |                     string[] applovinSubDirectories = Directory.GetDirectories(applovinPath, "applovin-ios-sdk-*"); | |||
|  |                     if (applovinSubDirectories.Length > 0) { | |||
|  |                         string applovinVersionDirectory = applovinSubDirectories[0]; | |||
|  |                         string applovinVersionDirectoryName = Path.GetFileName(applovinVersionDirectory); | |||
|  |                          // ATLog.logError("DynamicLibraryPathsToEmbed() >>> applovinVersionDirectoryName: " + applovinVersionDirectoryName); | |||
|  |                         dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "AppLovinSDK/" + applovinVersionDirectoryName + "/AppLovinSDK.xcframework")); | |||
|  |                     } | |||
|  |                 } | |||
|  | 
 | |||
|  |                 return dynamicLibraryPathsToEmbed; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         //读取本地已安装network的版本号:network_data.json | |||
|  |         // private static string getNetworkVersion(string networkDataJsonFilePath) | |||
|  |         // { | |||
|  |         //     if (!File.Exists(networkDataJsonFilePath)) { | |||
|  |         //         return ""; | |||
|  |         //     } | |||
|  |         //     string jsonData = File.ReadAllText(networkDataJsonFilePath); | |||
|  |         //     var networkLocalData = JsonUtility.FromJson<NetworkLocalData>(a_json); | |||
|  |         //     if (networkLocalData != null) { | |||
|  |         //         return networkLocalData.version; | |||
|  |         //     } | |||
|  |         //     retrun ""; | |||
|  |         // } | |||
|  | 
 | |||
|  |         private static List<string> BunldePathsToAdd { | |||
|  |             get { | |||
|  | 
 | |||
|  |                 var bunldePathsToAdd = new List<string>(); | |||
|  |                 bunldePathsToAdd.Add(Path.Combine("Pods/", "BigoADS/BigoADS/BigoADSRes.bundle")); | |||
|  |                 bunldePathsToAdd.Add(Path.Combine("Pods/", "Ads-Global/SDK/PAGAdSDK.bundle")); | |||
|  |                 bunldePathsToAdd.Add(Path.Combine("Pods/", "Ads-CN/SDK/CSJAdSDK.bundle")); | |||
|  |                 bunldePathsToAdd.Add(Path.Combine("Pods/", "Ads-CN-Beta/SDK/CSJAdSDK.bundle")); | |||
|  | 
 | |||
|  |                 return bunldePathsToAdd; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         private static readonly List<string> SwiftLanguageNetworks = new List<string> | |||
|  |         { | |||
|  |             "MoPub" | |||
|  |         }; | |||
|  | 
 | |||
|  |         private static readonly List<string> EmbedSwiftStandardLibrariesNetworks = new List<string> | |||
|  |         { | |||
|  |             "Facebook", | |||
|  |             "MoPub" | |||
|  |         }; | |||
|  | 
 | |||
|  |         [PostProcessBuildAttribute(int.MaxValue)] | |||
|  |         public static void TopOnPostProcessPbxProject(BuildTarget buildTarget, string buildPath) | |||
|  |         { | |||
|  |             var projectPath = PBXProject.GetPBXProjectPath(buildPath); | |||
|  |             var project = new PBXProject(); | |||
|  |             project.ReadFromFile(projectPath); | |||
|  | 
 | |||
|  | #if UNITY_2019_3_OR_NEWER | |||
|  |             var unityMainTargetGuid = project.GetUnityMainTargetGuid(); | |||
|  |             var unityFrameworkTargetGuid = project.GetUnityFrameworkTargetGuid(); | |||
|  | #else | |||
|  |             var unityMainTargetGuid = project.TargetGuidByName(UnityMainTargetName); | |||
|  |             var unityFrameworkTargetGuid = project.TargetGuidByName(UnityMainTargetName); | |||
|  | #endif | |||
|  | 
 | |||
|  |             project.SetBuildProperty(unityMainTargetGuid, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES"); | |||
|  |             project.SetBuildProperty(unityMainTargetGuid, "ENABLE_BITCODE", "NO"); | |||
|  | 
 | |||
|  |             project.SetBuildProperty(unityFrameworkTargetGuid, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES"); | |||
|  |             project.SetBuildProperty(unityFrameworkTargetGuid, "ENABLE_BITCODE", "NO"); | |||
|  | 
 | |||
|  |             EmbedDynamicLibrariesIfNeeded(buildPath, project, unityMainTargetGuid); | |||
|  |             AddBunleIfNeeded(buildPath, project, unityMainTargetGuid); | |||
|  | 
 | |||
|  |             project.WriteToFile(projectPath); | |||
|  |         } | |||
|  | 
 | |||
|  |         [PostProcessBuildAttribute(int.MaxValue)] | |||
|  |         public static void TopOnPostProcessPlist(BuildTarget buildTarget, string path) | |||
|  |         { | |||
|  |             var plistPath = Path.Combine(path, "Info.plist"); | |||
|  |             var plist = new PlistDocument(); | |||
|  |             plist.ReadFromFile(plistPath); | |||
|  | 
 | |||
|  | #if UNITY_2018_2_OR_NEWER | |||
|  |             AddGoogleApplicationIdIfNeeded(plist); | |||
|  | #endif | |||
|  | 
 | |||
|  |             plist.WriteToFile(plistPath); | |||
|  |         } | |||
|  | 
 | |||
|  |         private static void AddBunleIfNeeded(string buildPath, PBXProject project, string targetGuid) | |||
|  |         { | |||
|  |             var bunldePathsPresentInProject = BunldePathsToAdd.Where(bunldePath => Directory.Exists(Path.Combine(buildPath, bunldePath))).ToList(); | |||
|  |             if (bunldePathsPresentInProject.Count <= 0) return; | |||
|  |             ATLog.log("AddBunleIfNeeded"); | |||
|  | 
 | |||
|  | #if UNITY_2019_3_OR_NEWER | |||
|  |             foreach (var bunldePath in bunldePathsPresentInProject) | |||
|  |             { | |||
|  |                 var fileGuid = project.AddFile(bunldePath, bunldePath, PBXSourceTree.Source); | |||
|  |                 project.AddFileToBuild(targetGuid, fileGuid); | |||
|  |             } | |||
|  | #endif | |||
|  |         } | |||
|  | 
 | |||
|  |         private static void EmbedDynamicLibrariesIfNeeded(string buildPath, PBXProject project, string targetGuid) | |||
|  |         { | |||
|  |             mBuildPath = buildPath; | |||
|  |             ATLog.log("EmbedDynamicLibrariesIfNeeded() >>> buildPath: " + buildPath); | |||
|  |             var dynamicLibraryPathsPresentInProject = DynamicLibraryPathsToEmbed.Where(dynamicLibraryPath => Directory.Exists(Path.Combine(buildPath, dynamicLibraryPath))).ToList(); | |||
|  |             if (dynamicLibraryPathsPresentInProject.Count <= 0) return; | |||
|  | 
 | |||
|  | #if UNITY_2019_3_OR_NEWER | |||
|  |             foreach (var dynamicLibraryPath in dynamicLibraryPathsPresentInProject) | |||
|  |             { | |||
|  |                 var fileGuid = project.AddFile(dynamicLibraryPath, dynamicLibraryPath); | |||
|  |                 project.AddFileToEmbedFrameworks(targetGuid, fileGuid); | |||
|  |             } | |||
|  | #else | |||
|  |             string runpathSearchPaths; | |||
|  | #if UNITY_2018_2_OR_NEWER | |||
|  |             runpathSearchPaths = project.GetBuildPropertyForAnyConfig(targetGuid, "LD_RUNPATH_SEARCH_PATHS"); | |||
|  | #else | |||
|  |             runpathSearchPaths = "$(inherited)";           | |||
|  | #endif | |||
|  |             runpathSearchPaths += string.IsNullOrEmpty(runpathSearchPaths) ? "" : " "; | |||
|  | 
 | |||
|  |             // Check if runtime search paths already contains the required search paths for dynamic libraries. | |||
|  |             if (runpathSearchPaths.Contains("@executable_path/Frameworks")) return; | |||
|  | 
 | |||
|  |             runpathSearchPaths += "@executable_path/Frameworks"; | |||
|  |             project.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", runpathSearchPaths); | |||
|  | #endif | |||
|  |         } | |||
|  | 
 | |||
|  | #if UNITY_2018_2_OR_NEWER | |||
|  | 
 | |||
|  |         private static void AddGoogleApplicationIdIfNeeded(PlistDocument plist) | |||
|  |         { | |||
|  |             if (!ATConfig.isNetworkInstalledByName("Admob", ATConfig.OS_IOS)) | |||
|  |             {    | |||
|  |                 ATLog.log("addGoogleApplicationIdIfNeeded() >>> Admob not install."); | |||
|  |                 return; | |||
|  |             } | |||
|  |             //获取admob app id | |||
|  |             var appId = ATConfig.getAdmobAppIdByOs(ATConfig.OS_IOS); | |||
|  | 
 | |||
|  |             if (string.IsNullOrEmpty(appId) || !appId.StartsWith("ca-app-pub-")) | |||
|  |             { | |||
|  |                 ATLog.logError("AdMob App ID is not set. Please enter a valid app ID within the ThinkupTpn Integration Manager window."); | |||
|  |                 return; | |||
|  |             } | |||
|  | 
 | |||
|  |             const string googleApplicationIdentifier = "GADApplicationIdentifier"; | |||
|  |             plist.root.SetString(googleApplicationIdentifier, appId); | |||
|  |         } | |||
|  | #endif | |||
|  |     } | |||
|  | } | |||
|  | #endif |