Xcode Embedded Binaries动态添加库

在导出xcode工程之后,我们有可能需要在Embedded Binaries下增加相关库的引用,为了能够集成在构建路中,可以通过一下方式,用unity提供的xcode api来实现脚本添加依赖库。

#if UNITY_EDITOR_OSX
 
 using UnityEditor.iOS.Xcode;
 using UnityEditor.iOS.Xcode.Extensions;
 
 #endif
 
 public class TestBuildPostprocessor {
     [PostProcessBuild]
     public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) {
         
         if (target != BuildTarget.iOS) {
             UnityEngine.Debug.LogWarning ("Target is not iPhone. XCodePostProcess will not run");
             return;
         }
 #if UNITY_EDITOR_OSX
         //EmbedFrameworks
         string projPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);
         PBXProject proj = new PBXProject();
         proj.ReadFromString(File.ReadAllText(projPath));
         string targetGuid = proj.TargetGuidByName("Unity-iPhone");
         const string defaultLocationInProj = "Plugins/iOS";
         const string coreFrameworkName = "test.framework";
         string framework = Path.Combine(defaultLocationInProj, coreFrameworkName);
         string fileGuid = proj.AddFile(framework, "Frameworks/" + framework, PBXSourceTree.Sdk);
         PBXProjectExtensions.AddFileToEmbedFrameworks(proj, targetGuid, fileGuid);
         proj.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks");
         proj.WriteToFile (projPath);
         //EmbedFrameworks end
 #endif
     }
 }

关键字解释:
UNITY_EDITOR_OSX:Mac OS X上编辑器代码的#define指令。
PostProcessBuild:被该标签标注的函数将自动在build player后被调。
OnPostprocessBuild:unity自带的一个方法,这个方法会在我们打包导工程的时候调用。

补充:
因为PBXProject.AddFile接口查找的文件路径是Xcode app的路径加上第一个参数的路径,不是很友好,如果framework已经放入项目中了,可以使用以下两种接口,得到fileGuid。
PBXProject.FindFileGuidByRealPath
PBXProject.FindFileGuidByProjectPath

你可能感兴趣的:(Xcode Embedded Binaries动态添加库)