Facebook-sdk-for-unity: Unity 2019.3 - RegisterMonoModule.h ausente

Criado em 26 nov. 2019  ·  11Comentários  ·  Fonte: facebook/facebook-sdk-for-unity

## Lista de controle

## Meio Ambiente
Descreva seu ambiente de desenvolvimento aqui, dando o máximo de detalhes possível. Se você os tiver, certifique-se de incluir:

  • Versão do Editor do Unity: 2019.3.12b
  • Versão do SDK do Unity: 7.18.0, 7.17.2
  • Versão e plataforma de instalação: [iOS] version 10.0+

    Metas

    Construir para iOS usando Unity 2019.3

    resultados esperados

    Construção bem sucedida

    Resultados reais

A compilação falha porque RegisterMonoModule.h não é mais fornecido no Unity 2019.3 por design: https://issuetracker.unity3d.com/issues/filenotfoundexception-when-building-a-project-with-facebook-sdk-for-ios

Como a versão mínima com suporte do Unity já é 5.4, você pode simplesmente remover a parte FixUp relacionada com RegisterMonoModules.cpp e RegisterMonoModules.hi supor e remover as linhas 21-27 do FBUnityInterface.h.

## Passos para reproduzir
Quais são as etapas necessárias para reproduzir esse problema?

  1. Crie um projeto vazio em 2019.3+
  2. Adicionar FB SDK 7.18.0 ou 7.17.2
  3. Tente construir para um IOS
bug

Comentários muito úteis

As compilações locais foram criadas apesar do erro, mas as compilações no modo de lote falharam devido à falta do arquivo.

Além de remover o #include "RegisterMonoModules.h" do Facebook / FacebookSDK / SDK / Editor / iOS / FBUnityInterface.h e sempre incluir o UnityTrampolineConfigure.h.

Estamos usando esta solução alternativa para ter um arquivo falso:

#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

Todos 11 comentários

Você encontrou uma solução?

Você encontrou uma solução?

Apenas remover #include "RegisterMonoModules.h" do Facebook / FacebookSDK / SDK / Editor / iOS / FBUnityInterface.h e sempre incluir UnityTrampolineConfigure.h funcionou para nós.


O RegisterModules.h era um arquivo com apenas um método: void RegisterMonoModules();
Na unidade 2019.3, eles sabiamente o removeram.

Mas o SDK do Facebook está pedindo este arquivo apenas para adicionar um HAS_UNITY_VERSION_DEF se a unidade for mais recente que 4.3 xD
https://github.com/facebook/facebook-sdk-for-unity/blob/f76fd1cec1f08a36d90b21c8ab74cba1168f0d84/Facebook.Unity.Editor/iOS/FixupFiles.cs

Portanto, também alterei o FBUnityInterface.h para sempre incluir o UnityTrampolineConfigure.h (para manter o mesmo comportamento que tínhamos).

Eu também tenho esse problema!
Removi #include "RegisterMonoModules.h"

Mas ainda falha com /Pods/Headers/Public/FBSDKShareKit/FBSDKShareKit/FBSDKHashtag.h:24:9: Módulo 'FBSDKCoreKit' não encontrado

Até o Facebook lançar uma atualização, a melhor solução está abaixo entre as que tentei:

  • Crie um arquivo RegisterMonoModules.h vazio
  • Copie dentro de 'Unity /..../ Trampoline / ..' ao lado de FBUnityInterface.h
  • Depois de construir seu projeto com sucesso, copie-o para a biblioteca no XCode também

Esse arquivo é inútil agora, mas o FB SDK ainda depende dele.

Este arquivo também é referenciado no script de pós-processo que interrompe o pós-processo.

Alguém já encontrou uma solução alternativa para isso?

Eu comentei a linha "#include RegisterModules.h", mas quando reconstruí o jogo, ainda dizia que o RegisterModules.h não foi encontrado.

@ h3902340 Isso ocorre porque uma das dlls também tem uma referência a RegisterModules.h.

Olá, acabei de atualizar meu SDK do Facebook para Unity para 7.18.1, ele removeu a linha "#include RegisterModules.h", mas esta linha de código ainda faz referência a RegisterMonoModules.h, então o console ainda está reclamando de não encontrar o Arquivo RegisterMonoModules.h. Como essa linha de código está em um arquivo dll, não há uma solução fácil para esse problema. Corrija-o o mais rápido possível.

As compilações locais foram criadas apesar do erro, mas as compilações no modo de lote falharam devido à falta do arquivo.

Além de remover o #include "RegisterMonoModules.h" do Facebook / FacebookSDK / SDK / Editor / iOS / FBUnityInterface.h e sempre incluir o UnityTrampolineConfigure.h.

Estamos usando esta solução alternativa para ter um arquivo falso:

#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

Repetindo @ h3902340

Parece que 177ff89235716c0f9c4225cf9c11355115da2282 removeu o #include "RegisterMonoModules.h" . No entanto, o código que depende de RegisterMonoModules.h ainda está no mestre:

Isso também significa que HAS_UNITY_VERSION_DEF nunca será definido em FBUnityInterface.h (essa definição veio do RegisterMonoModules.h modificado), portanto, o pré-processador inclui:

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

Este arquivo seria incluído em versões anteriores do Facebook SDK for Unity ao compilar para Unity 4.3+. Não tenho certeza se este foi um efeito colateral pretendido de 177ff89235716c0f9c4225cf9c11355115da2282 (o commit que mencionei acima).

_Atualização referente a HAS_UNITY_VERSION_DEF: _
UnityTrampolineConfigure.h é basicamente um arquivo gerado automaticamente pelo Unity contendo:

#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

Portanto, parece que #include "UnityTrampolineConfigure.h" e o #ifdef ao seu redor podem ser removidos sem problemas, já que UNITY_VERSION não é usado em nenhum lugar do SDK ...

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

derwaldgeist picture derwaldgeist  ·  4Comentários

michelleran picture michelleran  ·  4Comentários

sivu picture sivu  ·  6Comentários

Duke74 picture Duke74  ·  4Comentários

edscodeblenders picture edscodeblenders  ·  4Comentários