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

Erstellt am 26. Nov. 2019  ·  11Kommentare  ·  Quelle: facebook/facebook-sdk-for-unity

##Checkliste

## Umgebung
Beschreiben Sie hier Ihre Entwicklungsumgebung und geben Sie so viele Details wie möglich an. Wenn Sie sie haben, stellen Sie sicher, dass Sie Folgendes angeben:

  • Unity-Editor-Version: 2019.3.12b
  • Unity SDK-Version: 7.18.0, 7.17.2
  • Installationsplattform und Version: [iOS] Version 10.0+

    Tore

    Build für iOS mit Unity 2019.3

    erwartete Ergebnisse

    Erfolgreicher Build

    Tatsächliche Ergebnisse

Die Kompilierung schlägt fehl, da RegisterMonoModule.h nicht mehr in Unity 2019.3 vorgesehen ist: https://issuetracker.unity3d.com/issues/filenotfoundexception-when-building-a-project-with-facebook-sdk-for-ios

Da die von Unity unterstützte Mindestversion bereits 5.4 ist, können Sie einfach den FixUp-Teil in Bezug auf RegisterMonoModules.cpp und RegisterMonoModules.hi entfernen und die Zeilen 21-27 aus FBUnityInterface.h entfernen.

## Schritte zum Reproduzieren
Welche Schritte sind erforderlich, um dieses Problem zu reproduzieren?

  1. Erstellen Sie ein leeres Projekt auf 2019.3+
  2. FB-SDK 7.18.0 oder 7.17.2 hinzufügen
  3. Versuchen Sie, für ein IOS zu bauen
bug

Hilfreichster Kommentar

Lokale Builds wurden trotz des Fehlers erstellt, aber Builds im Batchmodus schlugen aufgrund der fehlenden Datei fehl.

Abgesehen davon, dass Sie das #include "RegisterMonoModules.h" aus Facebook / FacebookSDK / SDK / Editor / iOS / FBUnityInterface.h entfernen und immer das UnityTrampolineConfigure.h einschließen.

Wir verwenden diesen Workaround, um eine gefälschte Datei zu haben:

#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

Alle 11 Kommentare

Haben Sie eine Lösung gefunden?

Haben Sie eine Lösung gefunden?

Es hat für uns funktioniert, einfach das #include "RegisterMonoModules.h" aus dem Facebook/FacebookSDK/SDK/Editor/iOS/FBUnityInterface.h zu entfernen und immer das UnityTrampolineConfigure.h einzubinden .


Das RegisterModules.h Es war eine Datei mit nur einer Methode: void RegisterMonoModules();
In Unity 2019.3 haben sie es mit Bedacht entfernt.

Aber das Facebook SDK fragt nach dieser Datei, nur um eine HAS_UNITY_VERSION_DEF hinzuzufügen, wenn Unity neuer als 4.3 xD ist
https://github.com/facebook/facebook-sdk-for-unity/blob/f76fd1cec1f08a36d90b21c8ab74cba1168f0d84/Facebook.Unity.Editor/iOS/FixupFiles.cs

Also habe ich auch die FBUnityInterface.h so geändert, dass sie immer die UnityTrampolinConfigure.h enthält (um das gleiche Verhalten beizubehalten, das wir hatten).

Dieses Problem habe ich auch!
Ich habe #include "RegisterMonoModules.h" entfernt.

Aber es schlägt immer noch fehl mit /Pods/Headers/Public/FBSDKShareKit/FBSDKShareKit/FBSDKHashtag.h:24:9: Modul 'FBSDKCoreKit' nicht gefunden

Bis Facebook ein Update herausgibt, ist die beste Lösung unten unter denen, die ich ausprobiert habe:

  • Erstellen Sie eine leere RegisterMonoModules.h-Datei
  • Kopieren Sie dies in 'Unity/..../Trampolin/..' neben FBUnityInterface.h
  • Nachdem Sie Ihr Projekt erfolgreich erstellt haben, kopieren Sie es auch in die Bibliothek in XCode

Diese Datei ist jetzt nutzlos, aber das FB SDK ist immer noch davon abhängig.

Auf diese Datei wird auch vom Nachbearbeitungsskript verwiesen, das den Nachbearbeitungsprozess unterbricht.

Hat jemand schon einen Workaround dafür gefunden?

Ich habe die Zeile "#include RegisterModules.h" kommentiert, aber als ich das Spiel neu erstellt habe, stand immer noch, dass die RegisterModules.h nicht gefunden werden konnte.

@ h3902340 Dies liegt daran, dass eine der DLLs auch einen Verweis auf RegisterModules.h enthält.

Hallo, ich habe gerade mein Facebook SDK für Unity auf 7.18.1 aktualisiert, es hat die Zeile "#include RegisterModules.h" entfernt, aber diese Codezeile verweist immer noch auf RegisterMonoModules.h, daher beschwert sich die Konsole immer noch darüber, dass sie die Datei nicht findet RegisterMonoModules.h-Datei. Da sich diese Codezeile in einer DLL-Datei befindet, gibt es keine einfache Problemumgehung für dieses Problem. Bitte beheben Sie es so schnell wie möglich.

Lokale Builds wurden trotz des Fehlers erstellt, aber Builds im Batchmodus schlugen aufgrund der fehlenden Datei fehl.

Abgesehen davon, dass Sie das #include "RegisterMonoModules.h" aus Facebook / FacebookSDK / SDK / Editor / iOS / FBUnityInterface.h entfernen und immer das UnityTrampolineConfigure.h einschließen.

Wir verwenden diesen Workaround, um eine gefälschte Datei zu haben:

#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

Wiederholung @h3902340

Es scheint, dass 177ff89235716c0f9c4225cf9c11355115da2282 das #include "RegisterMonoModules.h" . Der Code, der von RegisterMonoModules.h abhängt, befindet sich jedoch immer noch im Master:

Es bedeutet auch, dass HAS_UNITY_VERSION_DEF niemals in FBUnityInterface.h definiert wird (diese Definition stammt aus der modifizierten RegisterMonoModules.h), sodass der Präprozessor dies entfernt:

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

Diese Datei war in früheren Versionen des Facebook SDK für Unity enthalten, wenn für Unity 4.3+ erstellt wurde. Ich bin mir nicht ganz sicher, ob dies eine beabsichtigte Nebenwirkung von 177ff89235716c0f9c4225cf9c11355115da2282 (dem oben erwähnten Commit) war.

_Update zu HAS_UNITY_VERSION_DEF:_
UnityTrampolineConfigure.h ist im Grunde eine von Unity automatisch generierte Datei, die Folgendes enthält:

#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

Es scheint also, dass #include "UnityTrampolinConfigure.h" und das #ifdef, das es umgibt, problemlos entfernt werden kann, da UNITY_VERSION nirgendwo im SDK verwendet wird ...

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen