Unity iOS构建错误:使用Firebase Unity SDK + Google VR SDK for Unity时出现重复符号

问题描述 投票:1回答:2

我正在开发一个Unity项目,我正在使用适用于Unity的Google VR SDK和来自Firebase SDK for Unity的FirebaseMessaging.unitypackage

当我尝试为iOS构建时,Google SDK的这种组合会引发duplicate symbols错误。


重现错误的最小,完整和可验证示例:

要求:

  • iOS设备(7.0或更高版本)
  • 计算机与macOS
  • 最新Unity版(5.5.2f1)
  • 最新的Xcode版本(8.2.1)

脚步:

  1. Download用于Unity的Google VR SDK(v1.20)。
  2. Download用于Unity的Firebase SDK(v3.0.0)。
  3. 解压缩适用于Unity的Firebase SDK。
  4. 打开Unity并创建一个新项目。
  5. 转到文件>构建设置...,选择iOS并单击Switch Platform。
  6. 打开播放器设置...并设置一个Bundle Identifier。
  7. 转到资产>导入包>自定义包...,选择GoogleVRForUnity.unitypackage并导入除Demos文件夹以外的所有内容。
  8. 将出现一个弹出窗口。选择我做了备份,继续前进!
  9. 将出现另一个弹出窗口。选择Import Package and Import all。
  10. 转到资产>导入包>自定义包...,选择解压缩的FirebaseMessaging.unitypackage并导入所有内容。
  11. 文件>保存项目
  12. 将iOS设备连接到计算机。
  13. 文件>构建和运行
  14. Xcode构建将失败,因为项目需要与团队签名。将它在Xcode项目中设置为有效的项目。
  15. 按Xcode播放按钮在您连接的iOS设备上构建和运行项目。

在Xcode上构建的项目将以以下错误结束:

架构arm64的25个重复符号

架构根据连接的iOS设备而变化,但错误是相同的。

Error screenshot


  • 有什么我们可以做的吗?
  • 这是一个必须由Google解决的错误吗?
ios xcode unity3d firebase google-vr
2个回答
1
投票

这是GVR sdk中的一个错误。问题是GVR已经发布,包括传递依赖,其中一些谷歌(或其他地方)的其他SDK也依赖于它们,例如firebase。由于Unity没有任何软件包管理,我们已经推出了自己的软件包:

https://github.com/googlesamples/unity-jar-resolver

但是,GVR sdk尚未使用它来包含其传递依赖性,因此我们得到了冲突。

我正在开发一个修复程序,使上面的IOSResolver,在GVR中检测到它并剥离不应包含的对象。

与此同时,您可以使用以下方法解决冗余对象:

  1. 在Assets / Plugins / iOS / libgvrunity.a中找到:libgvrunity.a
  2. 使用以下内容在文件夹中创建shell脚本: set -ex lipo libgvrunity.a -thin armv7 -output libgvrunity-armv7.a lipo libgvrunity.a -thin arm64 -output libgvrunity-arm64.a ar -t libgvrunity-armv7.a | grep 'GTMLogger\|GTMSession' | xargs ar -dv libgvrunity-armv7.a ar -t libgvrunity-arm64.a | grep 'GTMLogger\|GTMSession' | xargs ar -dv libgvrunity-arm64.a lipo libgvrunity.a -replace armv7 libgvrunity-armv7.a -replace arm64 libgvrunity-arm64.a -output libgvrunity-fat.a rm libgvrunity-armv7.a libgvrunity-arm64.a mkdir -p backup mv libgvrunity.a backup mv libgvrunity-fat.a libgvrunity.a
  3. 再次从Unity构建和运行。

0
投票

选项1:转到构建设置并搜索“无公共块”并将其设置为否

选项2:

  1. 转到目标设置中的构建阶段。
  2. 转到“使用库链接二进制”。
  3. 检查是否存在任何库两次。
  4. 再建一次。

选项3:

  1. 从其他链接器标志中删除了-ObjC。
© www.soinside.com 2019 - 2024. All rights reserved.