Unity iOS开发:如何通过构建后脚本添加Pod中的framework到目标?
解决Facebook Unity SDK 15.1.0 iOS构建后xcframework未自动添加至目标的问题
核心解决方案:Unity构建后自动化脚本
在Unity项目的Assets/Editor目录下创建一个C#脚本(如FacebookFrameworkPostBuildFix.cs),代码如下:
using UnityEngine; using UnityEditor; using UnityEditor.iOS.Xcode; using System.IO; public class FacebookFrameworkPostBuildFix { [PostProcessBuild(999)] public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject) { // 仅处理iOS构建 if (target != BuildTarget.iOS) return; // 读取Xcode项目配置文件 string pbxProjectPath = PBXProject.GetPBXProjectPath(pathToBuiltProject); PBXProject pbxProject = new PBXProject(); pbxProject.ReadFromString(File.ReadAllText(pbxProjectPath)); // 获取Unity-iPhone目标的唯一标识 string targetGuid = pbxProject.TargetGuidByName("Unity-iPhone"); // 定义需要添加的Facebook xcframework列表 string[] facebookFrameworks = new string[] { "FacebookCore.xcframework", "FacebookLogin.xcframework", "FacebookShare.xcframework" // 若有其他依赖xcframework,在此补充 }; // 批量添加并配置framework foreach (string frameworkName in facebookFrameworks) { // 拼接framework在Pods中的路径 string frameworkPath = Path.Combine("Pods/FacebookSDK", frameworkName); // 将framework添加到Xcode项目 string fileGuid = pbxProject.AddFile(frameworkPath, frameworkPath, PBXSourceTree.Source); // 关联到Unity-iPhone构建目标 pbxProject.AddFileToBuild(targetGuid, fileGuid); // 配置嵌入模式为Embed & Sign,同时设置必要的构建参数 pbxProject.SetBuildProperty(targetGuid, "EMBEDDED_CONTENT_CONTAINS_SWIFT", "YES"); pbxProject.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks"); pbxProject.SetFrameworkEmbedType(targetGuid, fileGuid, PBXFrameworkEmbedType.EmbedSign); } // 保存修改后的配置文件 File.WriteAllText(pbxProjectPath, pbxProject.WriteToString()); Debug.Log("Facebook xcframework已自动添加至Unity-iPhone目标"); } }
脚本说明
- 执行时机:
[PostProcessBuild(999)]设置高优先级,确保脚本在Unity默认iOS构建流程完成后执行,避免被其他操作覆盖。 - 路径适配:脚本默认Facebook SDK的xcframework位于
Pods/FacebookSDK目录,若你的Pod结构不同,需调整frameworkPath的拼接逻辑。 - 嵌入配置:通过
PBXFrameworkEmbedType.EmbedSign匹配手动操作的"Embed & Sign"模式,同时配置Swift支持和运行路径,保证framework能被正确加载。
使用步骤
- 将脚本放入Unity项目的
Assets/Editor文件夹(无此文件夹则新建)。 - 正常执行iOS构建流程,脚本会自动在构建完成后修改Xcode项目。
- 打开生成的Xcode项目,检查
General > Frameworks, Libraries, and Embedded Content,确认目标xcframework已添加并设置为"Embed & Sign"。
注意事项
- 若使用的Facebook SDK包含其他xcframework(如
FacebookGamingServices.xcframework),请在facebookFrameworks数组中补充对应名称。 - 确保Unity iOS构建设置中,
Scripting Backend设置为IL2CPP(Facebook SDK 15.x推荐配置)。 - 若构建后仍有问题,可检查Xcode项目
Build Settings中的Framework Search Paths是否包含Pods/FacebookSDK路径。
内容的提问来源于stack exchange,提问作者waldgeist
相关产品推荐
相关产品推荐

