You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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能被正确加载。

使用步骤

  1. 将脚本放入Unity项目的Assets/Editor文件夹(无此文件夹则新建)。
  2. 正常执行iOS构建流程,脚本会自动在构建完成后修改Xcode项目。
  3. 打开生成的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:35:22