從 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
請注意,動態連結可能會增加應用程式的啟動時間,尤其是當應用程式有大量依附元件時。