Liên kết các phần phụ thuộc Firebase tĩnh hoặc động

Bắt đầu với CocoaPods 1.9.0 và Firebase 7, bạn có thể chọn xem các phần phụ thuộc Firebase của mình được xây dựng dưới dạng khung tĩnh hay khung động. Chúng tôi khuyên bạn nên sử dụng các khuôn khổ tĩnh trừ khi bạn yêu cầu các hành vi thư viện động nhất định.

Lưu ý rằng các thư viện được phát triển bên ngoài GitHub chỉ có thể được liên kết tĩnh ngay cả với CocoaPods 1.9.0 trở lên. Hiện tại, danh sách thư viện này bao gồm AdMob, Analytics, Firebase ML và Giám sát hiệu suất. Tất cả các kênh phân phối khác, bao gồm tệp zip, Trình quản lý gói Swift và Carthage chỉ cung cấp các thư viện được liên kết tĩnh.

Tài liệu này giả định kiến ​​thức làm việc về liên kết động và tĩnh trên các nền tảng của Apple. Nếu bạn không quen với những khái niệm này, hãy xem tài liệu sau:

Vì tài liệu này là có liên quan với các loại liên kết thư viện và không phải là tải bó tài nguyên không thực thi, các điều khoản thư việnkhung được sử dụng thay thế cho nhau.

Liên kết tĩnh

Các thư viện được liên kết tĩnh được đóng gói trong ứng dụng của bạn có thể thực thi tại thời điểm xây dựng. Do đó, các tệp đối tượng trong thư viện tĩnh sẽ có trong ứng dụng của bạn khi ứng dụng khởi chạy và không cần trình liên kết động giải quyết vào thời điểm khởi chạy ứng dụng. Do đó, các ứng dụng sử dụng liên kết tĩnh sẽ khởi chạy nhanh hơn. Điều này xảy ra với chi phí của tệp thực thi ứng dụng / nhị phân lớn hơn một chút, mặc dù cần lưu ý rằng kích thước tệp thực thi lớn hơn sẽ được bù đắp bởi việc thiếu các thư viện động đi kèm.

Bạn có thể buộc liên kết tĩnh của các phụ thuộc Firebase bằng cách chỉ định rõ ràng liên kết trong Podfile của bạn:

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

Liên kết động

Thư viện được liên kết động được lưu trữ trong gói ứng dụng của bạn tách biệt với tệp thực thi chính của ứng dụng và chúng phải được tải vào thời điểm khởi chạy ứng dụng bởi trình liên kết động. Các khuôn khổ của Apple đều được liên kết động để cho phép chia sẻ mã giữa các quy trình; tương tự, bạn có thể sử dụng các khung động để chia sẻ mã giữa các mục tiêu ứng dụng và tiện ích. Bạn không thể chia sẻ khung động giữa các ứng dụng riêng biệt, ngay cả khi cả hai đều được ký bởi cùng một nhà phát triển.

Nếu bạn muốn sử dụng Firebase như một phần phụ thuộc của mục tiêu khung động, bạn cũng cần liên kết Firebase động; nếu không bạn sẽ chạy vào định nghĩa lớp trùng lặp trong thời gian chạy của ứng dụng. Liên kết động là hành vi mặc định với use_frameworks! , nhưng bạn vẫn có thể chỉ định rõ ràng liên kết động trong Podfile của mình:

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

Lưu ý rằng liên kết động có thể làm tăng thời gian khởi chạy ứng dụng của bạn, đặc biệt nếu ứng dụng của bạn có nhiều phụ thuộc.