在导出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工程导出后,通过Unity的Xcode API动态添加Embedded Binaries中的库。利用UNITY_EDITOR_OSX宏和PostProcessBuild事件,特别是在OnPostprocessBuild方法中调用PBXProject的相关接口,如AddFile、FindFileGuidByRealPath和FindFileGuidByProjectPath,来实现便捷地集成和管理库文件。
712

被折叠的 条评论
为什么被折叠?



