91 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C#
		
	
	
|  | #if UNITY_IOS|| UNITY_IPHONE | ||
|  | 
 | ||
|  | namespace Guru.Editor | ||
|  | { | ||
|  |     using System.Collections.Generic; | ||
|  |     using System.IO; | ||
|  |     using UnityEditor; | ||
|  |     using UnityEditor.Callbacks; | ||
|  |     using UnityEditor.iOS.Xcode; | ||
|  |     using UnityEditor.iOS.Xcode.Extensions; | ||
|  |      | ||
|  |      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 | ||
|  |         } | ||
|  | 
 | ||
|  |         [PostProcessBuild(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 |