從 CocoaPods 1.9.0 和 Firebase 7 開始,您可以選擇 Firebase 依附元件要建構為靜態或動態架構。除非需要特定動態程式庫行為,否則建議使用靜態架構。
請注意,即使使用 CocoaPods 1.9.0 以上版本,在 GitHub 以外開發的程式庫也只能靜態連結。目前,這個程式庫清單包含 AdMob、Analytics、Firebase ML 和 Performance Monitoring。其他所有發布管道 (包括 zip 檔案、Swift Package Manager 和 Carthage) 僅提供靜態連結程式庫。
本文假設您已具備 Apple 平台動態和靜態連結的工作知識。如果不熟悉這些概念,請參閱下列說明文件:
由於本文著重於程式庫連結類型,而非載入不可執行的資源套件,因此「程式庫」和「架構」這兩個詞彙可互換使用。
靜態連結
靜態連結的程式庫會在建構時,與應用程式可執行檔一併封裝。因此,靜態程式庫中的物件檔案會在應用程式啟動時存在於應用程式中,不需要由動態連結器在應用程式啟動時解析。因此,使用靜態連結的應用程式啟動速度會更快。這會導致二進位檔 / 應用程式可執行檔略大,但請注意,由於沒有隨附的動態程式庫,可執行檔較大所造成的影響會抵銷。
如要強制靜態連結 Firebase 依附元件,請在 Podfile 中明確指定連結:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
動態連結
動態連結程式庫會與應用程式的主要可執行檔分開儲存在應用程式套件中,且必須在應用程式啟動時由動態連結器載入。Apple 的架構全都會動態連結,以便在程序之間共用程式碼;同樣地,您也可以使用動態架構,在應用程式和擴充功能目標之間共用程式碼。您無法在不同應用程式之間共用動態架構,即使兩者是由同一位開發人員簽署亦然。
如要將 Firebase 做為動態架構目標的依附元件,您也需要動態連結 Firebase,否則應用程式執行階段會發生重複的類別定義。使用 use_frameworks!
時,系統預設會進行動態連結,但您仍可在 Podfile 中明確指定動態連結:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
請注意,動態連結可能會增加應用程式的啟動時間,尤其是當應用程式有許多依附元件時。