Xcode Embedded Binaries动态添加库

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

在导出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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值