SDK_UnityMoney/Assets/ThinkupTpnPlugin/Script/Editor/ATPostProcessBuildiOS.cs

235 lines
10 KiB
C#
Raw Permalink Normal View History

2025-08-30 05:15:51 +00:00
#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