90 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
	
| #if UNITY_IOS || UNITY_IPHONE
 | |
| 
 | |
| using System.Collections.Generic;
 | |
| using System.IO;
 | |
| using UnityEditor;
 | |
| using UnityEditor.Callbacks;
 | |
| using UnityEditor.iOS.Xcode;
 | |
| using UnityEditor.iOS.Xcode.Extensions;
 | |
| 
 | |
| namespace Moloco.IOS.Scripts.Editor
 | |
| {
 | |
|     public class MolocoPostProcessBuildiOS
 | |
|     {
 | |
| #if !UNITY_2019_3_OR_NEWER
 | |
|         private const string UnityMainTargetName = "Unity-iPhone";
 | |
| #endif
 | |
| 
 | |
|         private static readonly List<string> DynamicLibrariesToEmbed = new List<string>
 | |
|         {
 | |
|             "MolocoSDK.xcframework",
 | |
|             "MolocoCustomAdapter.xcframework"
 | |
|         };
 | |
| 
 | |
|         private static void EmbedDynamicLibrariesIfNeeded(string buildPath, PBXProject project, string targetGuid)
 | |
|         {
 | |
|             // Check that the Pods directory exists (it might not if a publisher is building with Generate Podfile setting disabled in EDM).
 | |
|             var podsDirectory = Path.Combine(buildPath, "Pods");
 | |
|             if (!Directory.Exists(podsDirectory)) return;
 | |
| 
 | |
|             var dynamicLibraryPathsPresentInProject = new List<string>();
 | |
|             foreach (var dynamicLibraryToSearch in DynamicLibrariesToEmbed)
 | |
|             {
 | |
|                 // both .framework and .xcframework are directories, not files
 | |
|                 var directories =
 | |
|                     Directory.GetDirectories(podsDirectory, dynamicLibraryToSearch, SearchOption.AllDirectories);
 | |
|                 if (directories.Length <= 0) continue;
 | |
| 
 | |
|                 var dynamicLibraryAbsolutePath = directories[0];
 | |
|                 var index = dynamicLibraryAbsolutePath.LastIndexOf("Pods");
 | |
|                 var relativePath = dynamicLibraryAbsolutePath.Substring(index);
 | |
|                 dynamicLibraryPathsPresentInProject.Add(relativePath);
 | |
|             }
 | |
| 
 | |
|             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
 | |
|         }
 | |
| 
 | |
|         [PostProcessBuildAttribute(int.MaxValue)]
 | |
|         public static void MolocoPostProcessPbxProject(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
 | |
|             EmbedDynamicLibrariesIfNeeded(buildPath, project, unityMainTargetGuid);
 | |
|             project.WriteToFile(projectPath);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| #endif |