【问题标题】:Unity iOS app build failure: Firebase plugin errorUnity iOS 应用构建失败:Firebase 插件错误
【发布时间】:2020-06-15 17:59:53
【问题描述】:

我正在尝试通过 XCode 构建我的 Unity 游戏,但我在使用 Firebase 时遇到了很多麻烦。首先,我收到很多关于缺少引用的错误,因为我的 Podfile 是由编辑器错误地生成的。它正在搜索 .xml 文件中指定的错误版本的插件。我通过删除 Podfile 中的版本并启动“pod repo update”和“pod install”解决了这个问题。之后,当我尝试再次构建时,我得到了这个:

架构 armv7 的未定义符号: “firebase::ReferenceCountedFutureImpl::ReleaseMutexAndRunCallback(无符号 长)”,引用自: 无效 firebase::ReferenceCountedFutureImpl::CompleteInternal(无符号 long, int, char const*)::'lambda'(void*)>(unsigned long, int, char 常量*,无效 firebase::ReferenceCountedFutureImpl::CompleteInternal(无符号 long, int, char const*)::'lambda'(void*) const&) in libFirebaseCppInstanceId.a(instance_id_e6ccc884c5840734a302e2aabfa8925c.o) void firebase::ReferenceCountedFutureImpl::CompleteInternal, std::__1::allocator >, void firebase::ReferenceCountedFutureImpl::CompleteWithResultInternal, std::__1::allocator > >(无符号 long, int, char const*, std::__1::basic_string, std::__1::allocator > const&)::'lambda'(std::__1::basic_string, std::__1::allocator >*)>(无符号 长,整数,字符常量*,无效 firebase::ReferenceCountedFutureImpl::CompleteWithResultInternal, std::__1::allocator > >(无符号 long, int, char const*, std::__1::basic_string, std::__1::allocator > const&)::'lambda'(std::__1::basic_string, std::__1::allocator >*) const&) in libFirebaseCppInstanceId.a(instance_id_e6ccc884c5840734a302e2aabfa8925c.o) ld:未找到架构 armv7 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

如果我将 armv7 作为架构删除并仅保留 arm64,我会收到相同的错误,但会附加一个警告:

ld:警告:arm64 函数未 4 字节对齐:来自 /Users/user/Desktop/Unity - XCode/XWApp/Libraries/libiPhone-lib.a(unwind_test_arm64.o) 的 _unwind_tester

我尽我所能,我不知道该往哪里看。有人有想法吗?谢谢。

【问题讨论】:

    标签: c++ ios xcode firebase unity3d


    【解决方案1】:

    首先我应该说,通过在GitHub 上提交问题或使用Firebase's support page,您将获得更好的技术支持。如果您认为可以将其隔离为依赖解析器问题,GitHub project 也可以。在这些情况下来回设置项目会更容易。

    现在我将提到一些可能会有所帮助的调试步骤:

    如果可能,请始终使用 Firebase SDK 的 the latest version(当前为 6.11.0)。回归并不常见,每个新版本中几乎总是有错误修复,当您开始混合和匹配 Unity SDK 版本时,您可能会遇到非常古怪的编译或链接器错误。

    最好单独测试 Firebase 功能以确保您的操作系统或 Unity 编辑器没有任何问题,您可以查看并构建 quickstart applications 之一。由于 Firebase 在 iOS 和 Android 上做了很多工作来挂钩系统库,因此可能会遇到另一个插件或更深奥的编辑器设置的问题。如果您确实寻求支持,我几乎可以保证他们无论如何都会要求您这样做,以帮助获得良好的复制步骤。

    接下来,您通常应该让 Play Services Resolver 为 iOS 中的 Podfile 和工作区/项目管理做它的事情。我对幕后发生的事情做了fairly detailed writeup,但要分解一下:

    您的第一个错误是您缺少ReferenceCountedFuture(请注意all of the C++ SDK is open source,因此您可以查找该层出现的任何问题)。由于这是核心,它很可能在libFirebaseCppApp (Assets/Plugins/iOS/Firebase/lib/FirebaseCppApp.a) 中。您需要确保它包含在 Unity 端的 iOS 构建中,并且没有被您的版本控制系统作为某种构建工件排除在外(这是非常常见的)。

    根据您的评论,我认为您知道的很多,但为了其他读者的完整性,我会将其包含在内。其他依赖项通过 CocoaPods 引入(这些是 ObjectiveC 级别的依赖项,典型的非游戏 SDK)。它们位于与*Dependencies.xml 模式匹配的文件中,通常位于Editor/ 文件夹中。这些与 Unity 版本(例如:6.11.0)不匹配,并且通常是 Firebase 主线后面的版本。重要的是,您不要在版本上走得太远,因为如果 API 发生更改,问题很可能会表现为编译或运行时问题。

    我希望这里有帮助(如果确实让我知道的话),但如果您认为您可能遇到了错误,请务必在上面链接的频道中重新发布。

    --帕特里克

    【讨论】:

    • 嗯,就是这样的混搭!我在 6.11.0 与 Firebase 保持一致,但为了让它正常工作,我必须手动删除每个文件,然后重新导入。解析器肯定遗漏了一些东西,我通常让它删除过时的文件。无论如何,感谢您 Firebase 已解决,但现在我遇到了重复符号问题,仍然无法构建。但那是另一个故事,我猜!再次感谢您!
    • 我很高兴有帮助!
    【解决方案2】:

    按照 Firebase 文档 here 中列出的安装指南,我能够修复该错误

    1. 安装 Firebase SDK(按照上述指南中的每一步操作)

    2. 确保使用包管理器添加 Firebase 核心库

    3. 在 PlayerSettings 中确保您使用的是 .NET 4.x 脚本运行时版本

    4. 构建 Xcode 项目后,打开 PodFile 并确保 Firebase 库版本与 Unity 包管理器中的相同

    5. 在 Xcode 项目目录中打开终端并运行: pod install --repo-update

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-20
      • 2019-11-07
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多