Facebook-sdk-for-unity: Unity 2019.3 - RegistreMonoModule.h manquant

Créé le 26 nov. 2019  ·  11Commentaires  ·  Source: facebook/facebook-sdk-for-unity

## Liste de contrôle

## Environnement
Décrivez votre environnement de développement ici, en donnant autant de détails que possible. Si vous en avez, assurez-vous d'inclure :

  • Version de l'éditeur Unity : 2019.3.12b
  • Version du SDK Unity : 7.18.0, 7.17.2
  • Plateforme et version d'installation : [iOS] version 10.0+

    Buts

    Construire pour iOS à l'aide de Unity 2019.3

    Résultats attendus

    Construction réussie

    Résultats actuels

La compilation échoue car RegisterMonoModule.h n'est plus fourni dans Unity 2019.3 par conception: https://issuetracker.unity3d.com/issues/filenotfoundexception-when-building-a-project-with-facebook-sdk-for-ios

Étant donné que la version minimale prise en charge par Unity est déjà 5.4, vous pouvez simplement supprimer la partie FixUp liée à RegisterMonoModules.cpp et RegisterMonoModules.hi devinez et supprimer les lignes 21-27 de FBUnityInterface.h.

## Étapes pour reproduire
Quelles sont les étapes nécessaires pour reproduire ce problème ?

  1. Créer un projet vide sur 2019.3+
  2. Ajouter le SDK FB 7.18.0 ou 7.17.2
  3. Essayez de construire pour un IOS
bug

Commentaire le plus utile

Les builds locaux ont été générés malgré l'erreur, mais les builds en mode batch ont échoué en raison du fichier manquant.

En plus de supprimer le #include "RegisterMonoModules.h" de Facebook / FacebookSDK / SDK / Editor / iOS / FBUnityInterface.h et toujours en incluant le UnityTrampolineConfigure.h.

Nous utilisons cette solution de contournement pour avoir un faux fichier :

#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

Tous les 11 commentaires

Avez-vous trouvé une solution?

Avez-vous trouvé une solution?

Le simple fait de supprimer le #include "RegisterMonoModules.h" de Facebook/FacebookSDK/SDK/Editor/iOS/FBUnityInterface.h et d'inclure toujours le UnityTrampolineConfigure.h fonctionné pour nous.


Le RegisterModules.h c'était un fichier avec seulement une méthode : void RegisterMonoModules();
Dans l'unité 2019.3, ils l'ont judicieusement supprimé.

Mais Facebook SDK demande ce fichier juste pour ajouter un HAS_UNITY_VERSION_DEF si unity est plus récent que 4.3 xD
https://github.com/facebook/facebook-sdk-for-unity/blob/f76fd1cec1f08a36d90b21c8ab74cba1168f0d84/Facebook.Unity.Editor/iOS/FixupFiles.cs

J'ai donc également modifié le FBUnityInterface.h pour toujours inclure le UnityTrampolineConfigure.h (pour conserver le même comportement que nous avions).

J'ai aussi ce problème!
J'ai supprimé #include "RegisterMonoModules.h"

Mais il échoue toujours avec /Pods/Headers/Public/FBSDKShareKit/FBSDKShareKit/FBSDKHashtag.h:24:9: Module 'FBSDKCoreKit' introuvable

Jusqu'à ce que Facebook publie une mise à jour, la meilleure solution est ci-dessous parmi celles que j'ai essayées :

  • Créez un fichier RegisterMonoModules.h vide
  • Copiez-le dans 'Unity/..../Trampoline/..' à côté de FBUnityInterface.h
  • Après avoir réussi à créer votre projet, copiez-le dans la bibliothèque dans XCode également

Ce fichier est inutile maintenant mais FB SDK en dépend toujours.

Ce fichier est également référencé à partir du script de post-traitement qui interrompt le post-processus.

Quelqu'un a-t-il déjà trouvé une solution de contournement pour cela?

J'ai commenté la ligne "#include RegisterModules.h", mais lorsque j'ai reconstruit le jeu, il était toujours indiqué que le RegisterModules.h était introuvable.

@ h3902340 C'est parce que l'une des dll a également une référence à RegisterModules.h.

Salut, je viens de mettre à niveau mon SDK Facebook pour Unity vers 7.18.1, il a supprimé la ligne "#include RegisterModules.h", mais cette ligne de code fait toujours référence à RegisterMonoModules.h, donc la console se plaint toujours de ne pas trouver le Fichier RegisterMonoModules.h. Étant donné que cette ligne de code se trouve dans un fichier dll, il n'y a pas de solution de contournement facile à ce problème, veuillez le résoudre dès que possible.

Les builds locaux ont été générés malgré l'erreur, mais les builds en mode batch ont échoué en raison du fichier manquant.

En plus de supprimer le #include "RegisterMonoModules.h" de Facebook / FacebookSDK / SDK / Editor / iOS / FBUnityInterface.h et toujours en incluant le UnityTrampolineConfigure.h.

Nous utilisons cette solution de contournement pour avoir un faux fichier :

#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

Répétition @h3902340

Il semble que 177ff89235716c0f9c4225cf9c11355115da2282 ait supprimé le #include "RegisterMonoModules.h" . Cependant le code qui dépend de RegisterMonoModules.h est toujours dans le master :

Cela signifie également que HAS_UNITY_VERSION_DEF ne sera jamais défini dans FBUnityInterface.h (cette définition provient du RegisterMonoModules.h modifié), donc le préprocesseur supprime ceci :

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

Ce fichier serait inclus dans les versions précédentes du SDK Facebook pour Unity lors de la création pour Unity 4.3+. Je ne sais pas s'il s'agissait d'un effet secondaire prévu de 177ff89235716c0f9c4225cf9c11355115da2282 (le commit que j'ai mentionné ci-dessus).

_Mise à jour concernant HAS_UNITY_VERSION_DEF :_
UnityTrampolineConfigure.h est essentiellement un fichier généré automatiquement par Unity contenant :

#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

Il semble donc que #include "UnityTrampolineConfigure.h" et le #ifdef qui l'entoure puisse être supprimé sans problème, puisque UNITY_VERSION n'est utilisé nulle part dans le SDK...

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

manofspirit picture manofspirit  ·  6Commentaires

laijingfeng picture laijingfeng  ·  6Commentaires

naklow12 picture naklow12  ·  6Commentaires

pvalium picture pvalium  ·  6Commentaires

charanjeet5ingh picture charanjeet5ingh  ·  6Commentaires