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 向けにビルドする

    期待される結果

    成功したビルド

    実績

RegisterMonoModule.h が Unity 2019.3 で設計上提供されなくなったため、コンパイルが失敗します: https://issuetracker.unity3d.com/issues/filenotfoundexception-when-building-a-project-with-facebook-sdk-for-ios

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 用にビルドしてみる
bug

最も参考になるコメント

エラーが発生してもローカル ビルドはビルドされましたが、ファイルが見つからないためにバッチモードでのビルドは失敗しました。

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 は、Unity が 4.3 xD より新しい場合、HAS_UNITY_VERSION_DEF を追加するためだけにこのファイルを要求しています。
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これは、

こんにちは、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に依存するコードはまだマスターにあります。

また、 HAS_UNITY_VERSION_DEFがFBUnityInterface.h(定義は変更されたRegisterMonoModules.hからのもの)で定義されないため、プリプロセッサはこれを取り除きます。

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

このファイルは、Unity 4.3以降でビルドするときに、以前のバージョンのFacebook SDK forUnityに含まれていました。 これが 177ff89235716c0f9c4225cf9c11355115da2282 (上記のコミット) の意図した副作用であるかどうかはわかりません。

_更新reHAS_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

したがって、UNITY_VERSIONはSDKのどこにも使用されていないため、#include "UnityTrampolineConfigure.h"とそれを囲む#ifdefは問題なく削除できるようです...

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

edscodeblenders picture edscodeblenders  ·  4コメント

Shaitan1805 picture Shaitan1805  ·  6コメント

JuGGerNaunT picture JuGGerNaunT  ·  3コメント

sivu picture sivu  ·  6コメント

derwaldgeist picture derwaldgeist  ·  4コメント