Xcode集成Unity-iPhone时因SPM与CocoaPods重复依赖导致随机崩溃的问题求助
Xcode集成Unity-iPhone时因SPM与CocoaPods重复依赖导致随机崩溃的问题求助
大家好,我最近在尝试把Unity作为库集成到我们的原生Swift应用里,用的是某视频教程提到的方法——创建一个包含原生App的工作区,再把Unity-iPhone的.xcodeproj引入进来。本来大部分场景都能正常运行,但一涉及多依赖集成就出问题了,现在还遇到了随机崩溃的情况,实在搞不定,来求助各位大佬!
具体情况
- 我们的原生App使用**Swift Package Manager(SPM)**集成了Firebase等第三方库,随之引入了Promises、nanopb、GoogleUtilities这些依赖。
- 负责提供AR功能的Unity-iPhone项目,据开发它的团队说明,他们在Unity打包时会通过CocoaPods生成依赖,对应的Podfile大致如下:
source 'https://cdn.cocoapods.org/' platform :ios, '12.0' target 'UnityFramework' do pod 'ARCore/GARSesion' pod 'ARCore/Geospatial' end target 'Unity-iPhone' do end use_frameworks! :linkage => :static
这个Pod配置同样会引入Firebase、FirebaseCore、GoogleUtilities等和原生App重复的依赖。
问题表现
现在运行App时,有50%的概率会崩溃,日志里先会出现这类重复实现的警告:
objc[8347]: Class GULURLSessionDataResponse is implemented in both /private/var/containers/Bundle/Application/298197D2-7D84-4120-84EC-9A5E1C1D8A77/MyApp.app/Frameworks/UnityFramework.framework/UnityFramework (0x117a8c258) and /private/var/containers/Bundle/Application/298197D2-7D84-4120-84EC-9A5E1C1D8A77/MyApp.app/MyApp.debug.dylib (0x10846edf8). One of the two will be used. Which one is undefined. objc[8347]: Class FBLPromise is implemented in both /private/var/containers/Bundle/Application/298197D2-7D84-4120-84EC-9A5E1C1D8A77/MyApp.app/Frameworks/UnityFramework.framework/UnityFramework (0x117a89ce8) and /private/var/containers/Bundle/Application/298197D2-7D84-4120-84EC-9A5E1C1D8A77/MyApp.app/MyApp.debug.dylib (0x10846ee98). One of the two will be used. Which one is undefined. objc[8347]: Class GULLoggerWrapper is implemented in both /private/var/containers/Bundle/Application/298197D2-7D84-4120-84EC-9A5E1C1D8A77/MyApp.app/Frameworks/UnityFramework.framework/UnityFramework (0x117a8c190) and /private/var/containers/Bundle/Application/298197D2-7D84-4120-84EC-9A5E1C1D8A77/MyApp.app/MyApp.debug.dylib (0x10846ef60). One of the two will be used. Which one is undefined.
当崩溃发生时,会抛出如下错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FBLPromise HTTPBody]: unrecognized selector sent to instance 0x3024bc510' *** First throw call stack: (0x18995d08c 0x186c5f2e4 0x189a637c8 0x1898fa888 0x1898fa1b0 0x114fcd9bc 0x114fcca04 0x114f03978 0x114f0319c 0x102e0ca30 0x102e0e71c 0x102e16800 0x102e17360 0x102e245f0 0x102e23c00 0x210ca7c7c 0x210ca4488)
我的猜测与测试
我怀疑问题根源是我手动将UnityFramework.framework添加到了原生iOS项目中,导致它把所有依赖都引入进来,和原生SPM的依赖发生了冲突。
我特意从零新建了一个小项目复现这个场景:原生App用SPM集成依赖,Unity-iPhone用CocoaPods生成依赖。结果日志里同样出现了“重复实现”的警告,但这次没有崩溃,可能是因为我只调用了FirebaseApp.configure(),没有用到更多复杂的Firebase功能。
个人背景
我之前完全没接触过Unity集成,也没怎么处理过Xcode工作区中多项目的依赖问题,更不懂手动集成框架带来的依赖冲突该如何解决,真心希望各位能给我一些建议!谢谢大家!
备注:内容来源于stack exchange,提问作者Mihai Laurentiu Mocanu
相关产品推荐
相关产品推荐

