Facebook-sdk-for-unity: Unity 2019.3 - 缺少 RegisterMonoModule.h

创建于 2019-11-26  ·  11评论  ·  资料来源: facebook/facebook-sdk-for-unity

##清单

## 环境
在此处描述您的开发环境,并提供尽可能多的详细信息。 如果有它们,请确保包括:

  • Unity 编辑器版本: 2019.3.12b
  • Unity SDK 版本: 7.18.0, 7.17.2
  • 安装平台及版本: [iOS]版本10.0+

    目标

    使用 Unity 2019.3 为 iOS 构建

    预期成绩

    构建成功

    实际结果

编译失败,因为 Unity 2019.3 中不再按设计提供 RegisterMonoModule.h: https :

由于 Unity 支持的最低版本已经是 5.4,您可以简单地删除与 RegisterMonoModules.cpp 和 RegisterMonoModules.hi 相关的 FixUp 部分,并从 FBUnityInterface.h 中删除第 21-27 行。

## 重现步骤
重现此问题所需的步骤是什么?

  1. 在 2019.3+ 上创建一个空项目
  2. 添加 FB SDK 7.18.0 或 7.17.2
  3. 尝试为 IOS 构建

最有用的评论

尽管出现错误,但本地构建仍被构建,但由于缺少文件,批处理模式下的构建失败。

除了从 Facebook/FacebookSDK/SDK/Editor/iOS/FBUnityInterface.h 中删除 #include "RegisterMonoModules.h" 并始终包含 UnityTrampolineConfigure.h。

我们正在使用此解决方法来创建假文件:

#if UNITY_2019_3_OR_NEWER

using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;

namespace BuildTools.Editor
{
    public static class TemporaryFacebookFix20193
    {
        [PostProcessBuild(99)]
        static void BeforeFacebookOnPostProcessBuild(BuildTarget target, string pathToBuiltProject)
        {
            if(target != BuildTarget.iOS)
            {
                return;
            }

            var fullPath = Path.Combine(pathToBuiltProject, Path.Combine("Libraries", "RegisterMonoModules.h"));
            if(!File.Exists(fullPath))
            {
                File.Create(fullPath).Close();
            }
        }
    }
}
#endif

所有11条评论

您找到解决方案了吗?

您找到解决方案了吗?

只需从Facebook/FacebookSDK/SDK/Editor/iOS/FBUnityInterface.h 中删除#include "RegisterMonoModules.h"并始终包含为我们工作的UnityTrampolineConfigure.h


RegisterModules.h它是一个只有一个方法的文件: void RegisterMonoModules();
在 unity 2019.3 中,他们明智地将其删除。

但是 Facebook SDK 要求这个文件只是为了添加一个 HAS_UNITY_VERSION_DEF 如果 unity 比 4.3 xD 新
https://github.com/facebook/facebook-sdk-for-unity/blob/f76fd1cec1f08a36d90b21c8ab74cba1168f0d84/Facebook.Unity.Editor/iOS/FixupFiles.cs

因此,我还更改了 FBUnityInterface.h 以始终包含 UnityTrampolineConfigure.h(以保持与我们相同的行为)。

我也有这个问题!
我删除了#include“ RegisterMonoModules.h”

但它仍然失败 /Pods/Headers/Public/FBSDKShareKit/FBSDKShareKit/FBSDKHashtag.h:24:9: Module 'FBSDKCoreKit' not found

在 Facebook 发布更新之前,我尝试过的最佳解决方案如下:

  • 创建一个空的 RegisterMonoModules.h 文件
  • 将其复制到FBUnityInterface.h旁边的'Unity /..../ Trampoline / ..'
  • 成功构建项目后,将其复制到 XCode 中的库中

该文件现在没用了,但 FB SDK 仍然依赖它。

该文件也从后处理脚本中引用,该

有没有人为此提出解决方法?

我已经评论了“#include RegisterModules.h”这一行,但是当我重建游戏时,它仍然说找不到 RegisterModules.h。

@h3902340这是因为其中一个 dll 也引用了 RegisterModules.h。

嗨,我刚刚将我的Facebook SDK for Unity升级到7.18.1,它删除了“ #include RegisterModules.h”行,但是此行代码仍在引用RegisterMonoModules.h,因此控制台仍在抱怨找不到该行。 RegisterMonoModules.h文件。 由于这行代码在一个dll文件中,这个问题没有简单的解决方法,请尽快修复。

尽管出现错误,但本地构建仍被构建,但由于缺少文件,批处理模式下的构建失败。

除了从 Facebook/FacebookSDK/SDK/Editor/iOS/FBUnityInterface.h 中删除 #include "RegisterMonoModules.h" 并始终包含 UnityTrampolineConfigure.h。

我们正在使用此解决方法来创建假文件:

#if UNITY_2019_3_OR_NEWER

using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;

namespace BuildTools.Editor
{
    public static class TemporaryFacebookFix20193
    {
        [PostProcessBuild(99)]
        static void BeforeFacebookOnPostProcessBuild(BuildTarget target, string pathToBuiltProject)
        {
            if(target != BuildTarget.iOS)
            {
                return;
            }

            var fullPath = Path.Combine(pathToBuiltProject, Path.Combine("Libraries", "RegisterMonoModules.h"));
            if(!File.Exists(fullPath))
            {
                File.Create(fullPath).Close();
            }
        }
    }
}
#endif

重复@ h3902340

似乎 177ff89235716c0f9c4225cf9c11355115da2282 删除了#include "RegisterMonoModules.h" 。 然而,依赖于 RegisterMonoModules.h 的代码仍在 master 中:

这也意味着HAS_UNITY_VERSION_DEF永远不会在 FBUnityInterface.h 中定义(该定义来自修改后的 RegisterMonoModules.h),因此预处理器会删除包括:

#if HAS_UNITY_VERSION_DEF
#include "UnityTrampolineConfigure.h"
#endif

在为Unity 4.3+构建时,此文件将包含在Unity的Facebook SDK的早期版本中。 我不太确定这是否是 177ff89235716c0f9c4225cf9c11355115da2282(我上面提到的提交)的预期副作用。

_更新HAS_UNITY_VERSION_DEF:_
UnityTrampolineConfigure.h 基本上是一个由 Unity 自动生成的文件,其中包含:

#define UNITY_VERSION 201930

// known unity versions
#define UNITY_4_2_0 420
#define UNITY_4_2_1 421
#define UNITY_4_2_2 422
// ---8<---
#define UNITY_2019_1_0 201910
#define UNITY_2019_2_0 201920
#define UNITY_2019_3_0 201930

所以看起来#include“UnityTrampolineConfigure.h”和围绕它的#ifdef可以毫无问题地删除,因为UNITY_VERSION在SDK中没有使用......

此页面是否有帮助?
0 / 5 - 0 等级