Check out what’s new from Firebase at Google I/O 2022. Learn more

靜態或動態鏈接 Firebase 依賴項

從 CocoaPods 1.9.0 和 Firebase 7 開始,您可以選擇將 Firebase 依賴項構建為靜態框架還是動態框架。我們建議使用靜態框架,除非您需要某些動態庫行為。

請注意,即使使用 CocoaPods 1.9.0 及更高版本,在 GitHub 之外開發的庫也只能靜態鏈接。目前,此庫列表包括 AdMob、Analytics、Firebase ML 和 Performance Monitoring。所有其他分發渠道,包括 zip 文件、Swift 包管理器和 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

請注意,動態鏈接可能會增加您的應用程序的啟動時間,尤其是當您的應用程序有很多依賴項時。