使用 CocoaPods 进行 Unity-iPhone 集成时遇到问题,而我的本机应用程序使用 Swift Package Manager,两者都具有重复的依赖项,从而导致崩溃。
我正在尝试按照此视频中描述的相同方法将“Unity作为库”集成到我们的应用程序中。 基于这种方法,您创建一个包含本机应用程序(在 Swift 中)的工作区,然后集成 Unity-iPhone
.xcodeproj
,通常一切都会正常工作。然而,当我们尝试集成多个依赖项时,问题就开始出现。
目前,我们的本机应用程序使用 Swift Package Manager 来集成一些第三方库(例如 Firebase),从而带来其依赖项,例如 Promises、nanopb、GoogleUtilities 等。用于 AR 体验的 Unity-iPhone .xcodeproj
也使用一些第三方库,这些库是通过 CocoaPods 集成(据我从提供 Unity-iPhone 的机构了解到,pod 是在 Unity 中构建应用程序时生成的),pod 看起来像这样:
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
这还将带来第三方库,如 Firebase、FirebaseCore、GoogleUtilities、nanopb、PromisesObjC 等。当我尝试运行该应用程序时,它有 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项目中,这将调出其所有依赖项。
我尝试在另一个从头开始的小应用程序上复制相同的行为,方法是将 Swift Package Manager 包含到本机项目中,将 pod 包含到 Unity-iPhone 生成的项目中(是的,我必须为此安装 Unity) ,结果几乎相同,我在日志中得到“在两者中实现”,但这次它从未崩溃,也许是因为我没有调用除
FirebaseApp.configure()
之外的 Firebase 函数。
我之前没有 Unity 集成的经验,也没有将多个 Xcode 项目集成到 Xcode 工作区中,也没有手动集成来自框架的依赖项,我非常感谢您的帮助!预先感谢!
对所有依赖项使用 CocoaPods。
在同一个应用程序中使用两个包管理器非常具有挑战性