当 iOS 小部件已在主应用程序中使用时,您可以从它使用 Firebase 吗?

Can you use Firebase from an iOS widget when it's already used in the main application?

我在我的主要应用程序的目标中设置了 firebase Analytics 和 Crashlytics:所有库、GoogleService-Info.plist、Firebase.h...所有这些。现在我添加了一个小部件,它实际上能够导入各种库

import FirebaseApp

但是一旦我使用它

FirebaseApp.configure()

我使用

构建失败
Undefined symbols for architecture arm64: "_OBJC_CLASS_$FIRApp" ...

我想我可以访问这些库是因为 Firebase.h 文件。我知道我无法访问这些库,因为小部件 运行 在与包含这些库的应用程序不同的进程中。

我能够通过向我的项目添加一个包含 firebase 库的嵌入式框架,然后从小部件中使用它来部分工作,但这会导致主应用程序间歇性运行时崩溃 [FBLPromise HTTPBody]: unrecognized selector .根据 Firebase's docs,这是预期的未定义行为。除了这种方法之外,我还获得了有关在 2 个地方实施的 firebase 库的控制台日志。

从这里开始,我尝试创建一个单独的静态库来包装我需要的 firebase 库,然后将 API 呈现给应用程序和小部件,但是从主应用程序构建关于静态库试图访问的错误firbase 库。

有没有人设法从同一项目的主应用程序和小部件找到使用 firebase 的方法,特别是 Analytics?

我会说,我看到有人做了一个 hack,他们实际上向 FBLPromise 添加了一个扩展,并用空实现实现了无法识别的选择器,我认为这很糟糕,但现在正在考虑:/

编辑:我没有使用 Cocoapods 或 SPM,所以很遗憾,这都是手动的。

我最终解决了这个问题,方法是使用一个单独的嵌入式框架来包装 firebase 库,从主应用程序中删除这些库,然后仅通过这个单独的框架访问它们。出现了一个问题,即 FirebasePerformance 不能从扩展安全框架中使用,所以我没有在框架中对它做任何事情,而是在主应用程序中配置它,然后在 firebase 包装器上调用 configure() .