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
 |