Facebook-sdk-for-unity: Unity 2019.3 - Отсутствует RegisterMonoModule.h

Созданный на 26 нояб. 2019  ·  11Комментарии  ·  Источник: facebook/facebook-sdk-for-unity

## Контрольный список

## Среда
Опишите здесь свою среду разработки, предоставив как можно больше подробностей. Если они у вас есть, обязательно включите:

  • Версия редактора Unity: 2019.3.12b
  • Версия Unity SDK: 7.18.0, 7.17.2
  • Платформа и версия установки: [iOS] version 10.0+

    Цели

    Сборка для iOS с использованием Unity 2019.3

    Ожидаемые результаты

    Удачная сборка

    Фактические результаты

Сбой компиляции, потому что RegisterMonoModule.h больше не предоставляется в Unity 2019.3 по дизайну: https://issuetracker.unity3d.com/issues/filenotfoundexception-when-building-a-project-with-facebook-sdk-for-ios

Поскольку минимальная поддерживаемая версия Unity - уже 5.4, вы можете просто удалить часть FixUp, связанную с RegisterMonoModules.cpp и RegisterMonoModules.hi, и удалить строки 21–27 из FBUnityInterface.h.

## Действия по воспроизведению
Что нужно сделать, чтобы воспроизвести эту проблему?

  1. Создайте пустой проект на 2019.3+
  2. Добавить FB SDK 7.18.0 или 7.17.2
  3. Попробуйте собрать для iOS

Самый полезный комментарий

Несмотря на ошибку, локальные сборки были построены, но сборки в пакетном режиме завершились неудачно из-за отсутствия файла.

Помимо удаления #include «RegisterMonoModules.h» из Facebook / FacebookSDK / SDK / Editor / iOS / FBUnityInterface.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 Комментарий

Вы нашли решение?

Вы нашли решение?

Простое удаление #include "RegisterMonoModules.h" из Facebook / FacebookSDK / SDK / Editor / iOS / FBUnityInterface.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: Модуль 'FBSDKCoreKit' не найден

Пока Facebook не выпустит обновление, лучшее решение из тех, которые я пробовал, находится ниже:

  • Создайте пустой файл RegisterMonoModules.h
  • Скопируйте это в 'Unity /..../ Trampoline / ..' рядом с FBUnityInterface.h
  • После успешной сборки проекта скопируйте его также в библиотеку в XCode.

Этот файл сейчас бесполезен, но FB SDK все еще зависит от него.

На этот файл также ссылается сценарий постпроцесса, который прерывает постпроцесс.

Кто-нибудь еще придумал обходной путь для этого?

Я прокомментировал строку «#include RegisterModules.h», но когда я перекомпилировал игру, в ней все еще говорилось, что RegisterModules.h не может быть найден.

@ h3902340 Это потому, что одна из dll также имеет ссылку на RegisterModules.h.

Привет, я только что обновил свой Facebook SDK для Unity до 7.18.1, он удалил строку "#include RegisterModules.h", но эта строка кода все еще ссылается на RegisterMonoModules.h, поэтому консоль все еще жалуется на то, что не нашла Файл RegisterMonoModules.h. Поскольку эта строка кода находится в файле dll, простого решения этой проблемы нет, исправьте ее как можно скорее.

Несмотря на ошибку, локальные сборки были построены, но сборки в пакетном режиме завершились неудачно из-за отсутствия файла.

Помимо удаления #include «RegisterMonoModules.h» из Facebook / FacebookSDK / SDK / Editor / iOS / FBUnityInterface.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, все еще находится в главном:

Это также означает, что HAS_UNITY_VERSION_DEF никогда не будет определено в FBUnityInterface.h (это определение взято из измененного RegisterMonoModules.h), поэтому препроцессор удаляет это, включая:

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

Этот файл будет включен в предыдущие версии Facebook SDK для Unity при сборке для Unity 4.3+. Я не совсем уверен, был ли это побочный эффект 177ff89235716c0f9c4225cf9c11355115da2282 (коммит, о котором я упоминал выше).

_Update re 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 рейтинги

Смежные вопросы

1901 picture 1901  ·  6Комментарии

manofspirit picture manofspirit  ·  6Комментарии

pvalium picture pvalium  ·  6Комментарии

Duke74 picture Duke74  ·  4Комментарии

laijingfeng picture laijingfeng  ·  6Комментарии