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