【问题标题】:Building Unity project with Firebase Google Analytics SDK fails: "Could not load file or assembly 'UnityEditor.iOS.Extensions.Xcode"使用 Firebase Google Analytics SDK 构建 Unity 项目失败:“无法加载文件或程序集 'UnityEditor.iOS.Extensions.Xcode”
【发布时间】:2019-12-23 00:12:09
【问题描述】:

问题

我正在尝试将 Firebase Google Analytics 集成到我现有的 Unity 项目(适用于 iOS 和 Android 的手机游戏)中。我按照https://firebase.google.com/docs/unity/setup 上的说明进行操作(所有先决条件均已满足)。不幸的是,当尝试在 Windows 上构建 Android 版本时,我收到以下错误:

BadImageFormatException: Could not resolve field token 0x040000dc, due to: Could not load type of field 'Firebase.Editor.XcodeProjectModifier:projectInfoDoc' (2) due to: Could not load file or assembly 'UnityEditor.iOS.Extensions.Xcode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. assembly:UnityEditor.iOS.Extensions.Xcode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null type:<unknown type> member:(null) signature:<none> assembly:C:\Users\mform\Code\guessme\Assets\Firebase\Editor\Firebase.Editor.dll type:XcodeProjectModifier member:(null) signature:<none>
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <567df3e0919241ba98db88bec4c6696f>:0)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <567df3e0919241ba98db88bec4c6696f>:0)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <567df3e0919241ba98db88bec4c6696f>:0)
UnityEditor.Build.BuildPipelineInterfaces+AttributeCallbackWrapper.OnPostprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:158)
UnityEditor.Build.BuildPipelineInterfaces+<OnBuildPostProcess>c__AnonStorey2.<>m__1 (UnityEditor.Build.IPostprocessBuildWithReport bpp) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:398)
UnityEditor.Build.BuildPipelineInterfaces.InvokeCallbackInterfacesPair[T1,T2] (System.Collections.Generic.List`1[T] oneInterfaces, System.Action`1[T] invocationOne, System.Collections.Generic.List`1[T] twoInterfaces, System.Action`1[T] invocationTwo, System.Boolean exitOnFailure) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:356)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at C:/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:179)

Error building Player: BadImageFormatException: Could not resolve field token 0x040000dc, due to: Could not load type of field 'Firebase.Editor.XcodeProjectModifier:projectInfoDoc' (2) due to: Could not load file or assembly 'UnityEditor.iOS.Extensions.Xcode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. assembly:UnityEditor.iOS.Extensions.Xcode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null type:<unknown type> member:(null) signature:<none> assembly:C:\Users\mform\Code\guessme\Assets\Firebase\Editor\Firebase.Editor.dll type:XcodeProjectModifier member:(null) signature:<none>

我不明白为什么它会尝试加载这个程序集,这显然只适用于 iOS。而且我不知道如何预防或摆脱这个错误。

设置

构建设置

播放器设置

解决方案尝试

  • 我通过 Git 重置所有更改并从头开始重新执行这些步骤,重新导入 SDK 统一包
  • 使用 Play 服务解析器
    • 我更新了版本处理程序
    • 我强制解决了 Android 依赖项(有效)
  • 删除库文件夹并重建

不幸的是,这些都没有帮助。我将非常感谢任何指向正确方向的指针。

【问题讨论】:

  • 切换到 iOS 平台,构建,然后切换回 Android 平台并再次构建。
  • 非常感谢@Cœur!我在 Windows 上构建,甚至没有启用 iOS 支持。安装 Unity iOS 模块后,Android 构建工作正常!问题解决了。 ??????

标签: android firebase unity3d google-analytics google-analytics-firebase


【解决方案1】:

感谢@Cœur 的提示(感谢 1000 次),我在 Unity 编辑器中安装了 iOS 模块(尽管我只是尝试在 Windows 上构建 Android 版本)。安装 iOS 模块后,Android 构建工作正常。

【讨论】:

  • 您也可以相信stackoverflow.com/users/12590045/kit-tumbagahan,他也回复了,但由于格式原因,他的回答被删除了(类似于“你试过[...] iOS吗?”)。在我自己的案例中,我在为 macOS 构建时遇到了与 Unity 类似的问题,我必须切换到 iOS,然后再切换回 macOS 才能使其正常工作。
  • 好吧,如果我的一个开发人员写了一段需要 IOS 支持平台的代码,而你想为 Android 编译,我会解雇他 ^^ 这是背后糟糕代码的一个很好的例子.. 谷歌处于最佳状态?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多