Unity iOS构build错误:使用Firebase Unity SDK + Google VR SDK for Unity时出现重复符号
我正在开发一个Unity项目 ,使用Google VR SDK for Unity和Firebase SDK for Unity中的FirebaseMessaging.unitypackage 。
当我尝试为iOS构build时,Google SDK的这种组合会引发duplicate symbols
错误。
最小,完整和可validation的例子来重现错误:
要求:
- iOS设备(版本7.0或更高版本)
- 计算机与macOS
- 最新的Unity版本(5.5.2f1)
- 最新的Xcode版本(8.2.1)
脚步:
- 下载适用于Unity的Google VR SDK(v1.20)。
- 下载适用于Unity的Firebase SDK(v3.0.0)。
- 解压缩用于Unity的Firebase SDK。
- 打开Unity并创build一个新项目。
- 转到文件>构build设置… ,selectiOS,然后单击切换平台。
- 打开播放器设置…并设置套件标识符 。
- 转到资源>导入包>自定义包… ,select
GoogleVRForUnity.unitypackage
包 ,然后导入除演示文件夹以外的所有文件夹。 - 一个popup窗口将出现。 select我做了备份,前进! 。
- 另一个popup窗口将出现。 select导入包并导入全部。
- 转到资源>导入包>自定义包… ,select解压缩的
FirebaseMessaging.unitypackage
并导入所有。 - 文件>保存项目
- 将iOS设备连接到电脑。
- 文件>构build和运行
- Xcode构build将失败,因为项目需要与团队签名。 在你的Xcode项目中设置为有效的。
- 按Xcode播放button在您连接的iOS设备上构build并运行项目。
在Xcode上构build的项目将以下列错误结束:
架构arm64的25个重复符号
架构根据所连接的iOS设备而变化,但是错误是相同的。
- 有什么我们可以做的吗?
- 这是Google必须解决的错误吗?
这是GVR sdk中的一个bug。 问题是,GVR被发布,包括传递依赖,其中一些在谷歌(或别处)的其他SDK也依赖于,如firebase。 由于Unity没有任何包pipe理,我们已经推出了自己的:
https://github.com/googlesamples/unity-jar-resolver
但是GVR sdk还没有使用它来包含它的传递依赖,所以我们得到了冲突。
我正在修复上面的IOSResolver,在GVR中检测到这个问题,并去掉那些不应该被包含的对象。
在此期间,您可以使用以下方法自行去除冗余对象:
- 在Assets / Plugins / iOS / libgvrunity.a中findlibgvrunity.a
-
在具有以下内容的文件夹中创build一个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
-
再次build立并运行Unity。
选项1:转到构build设置并search“无公共块”并将其设置为否
选项2:
- 转到目标设置中的构build阶段。
- 转到“与库链接二进制文件”。
- 检查是否有任何库存在两次。
- 重新构build。
备选案文3:
- 从其他链接器标志中删除了-ObjC。