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

时间:2017-02-28 18:56:20

标签: ios xcode unity3d firebase google-vr

我正在开发一个 Unity项目,我正在使用 Google VR SDK for Unity Firebase SDK中的FirebaseMessaging.unitypackage为Unity

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

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

要求:

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

步骤:

  1. Download Google VR SDK for Unity(v1.20)。
  2. Download适用于Unity的Firebase SDK(v3.0.0)。
  3. 解压缩适用于Unity的Firebase SDK。
  4. 打开Unity并创建一个新项目。
  5. 转到文件>构建设置... ,选择iOS并单击Switch Platform。
  6. 打开播放器设置... 并设置捆绑标识符
  7. 转到资产>导入包>自定义包... ,选择GoogleVRForUnity.unitypackage并导入除演示文件夹以外的所有内容。
  8. 将出现一个弹出窗口。选择我做了备份,向前走!
  9. 将出现另一个弹出窗口。选择导入包导入全部。
  10. 转到资产>导入包>自定义包... ,选择解压缩的FirebaseMessaging.unitypackage并导入所有内容。
  11. 文件>保存项目
  12. 将iOS设备连接到计算机。
  13. 文件>建设与发展运行
  14. Xcode构建将失败,因为项目需要与团队签名。将它在Xcode项目中设置为有效的。
  15. 按Xcode播放按钮构建&在连接的iOS设备上运行项目。
  16. 基于Xcode的项目构建将以以下错误结束:

      

    架构arm64的25个重复符号

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

    Error screenshot

    • 我们可以做些什么吗?
    • 这是一个必须由Google解决的错误吗?

2 个答案:

答案 0 :(得分: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构建并运行。

答案 1 :(得分:0)

选项1:转到构建设置并搜索"无通用块"并设置为否

选项2:

  1. 转到目标设置中的构建阶段。
  2. 转到“链接二进制文件”     库”。
  3. 检查是否存在任何库两次。
  4. 再次建造。
  5. 选项3:

    1. 从其他链接器标志中删除-ObjC。