Google 致力于为黑人社区推动种族平等。查看具体举措

静态或动态链接 Firebase 依赖项

从 CocoaPods 1.9.0 和 Firebase 7 开始,您可以选择将 Firebase 依赖项构建为静态框架还是动态框架。我们建议使用静态框架,除非您需要某些动态库行为。

请注意,即使使用 CocoaPods 1.9.0 及更高版本,在 GitHub 之外开发的库也只能静态链接。目前,此库列表包括 AdMob、Analytics、Firebase ML 和 Performance Monitoring。所有其他分发渠道,包括 zip 文件、Swift Package Manager 和 Carthage,仅提供静态链接库。

本文档假定您了解 Apple 平台上的动态和静态链接。如果您不熟悉这些概念,请查看以下文档:

由于本文件涉及的类型库链接,而不是非可执行资源包的载荷,术语框架可以互换使用。

静态链接

静态链接库在构建时捆绑到您的应用程序可执行文件中。因此,静态库中的目标文件将在您的应用程序启动时出现在您的应用程序中,并且不需要在应用程序启动时由动态链接器解析。因此,使用静态链接的应用程序将启动得更快。这是以稍微大一点的二进制/应用程序可执行文件为代价的,尽管应该注意较大的可执行文件大小将被缺少捆绑动态库所抵消。

您可以通过在 Podfile 中显式指定链接来强制静态链接 Firebase 依赖项:

# cocoapods >= 1.9.0
use_frameworks! :linkage => :static

动态链接

动态链接库与应用程序的主要可执行文件分开存储在您的应用程序包中,并且它们必须在应用程序启动时由动态链接器加载。 Apple 的框架都是动态链接的,可以实现进程间的代码共享;同样,您可以使用动态框架在您的应用程序和扩展目标之间共享代码。您不能在不同的应用程序之间共享动态框架,即使它们都由同一个开发人员签名。

如果要使用 Firebase 作为动态框架目标的依赖项,还需要动态链接 Firebase;否则你会碰到重复的类定义在应用程序的运行。动态连接是默认行为use_frameworks! ,但您仍然可以在 Podfile 中明确指定动态链接:

# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic

请注意,动态链接可能会增加您应用的启动时间,尤其是当您的应用有很多依赖项时。