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

Kể từ CocoaPods 1.9.0 và Firebase 7, bạn có thể chọn Các phần phụ thuộc của Firebase được xây dựng dưới dạng khung tĩnh hoặc động. Bạn nên bằng cách sử dụng khung tĩnh trừ phi bạn yêu cầu một số hành vi thư viện động nhất định.

Xin lưu ý rằng các thư viện được phát triển bên ngoài GitHub chỉ có thể liên kết theo phương thức 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 loại phân phối khác các kênh, bao gồm tệp zip, Swift Package Manager và Carthage cung cấp chỉ với các thư viện được liên kết tĩnh.

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

Vì tài liệu này liên quan đến các loại liên kết thư viện chứ không phải tải gói tài nguyên không thực thi, thuật ngữ libraryframework đượ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 nhóm vào ứng dụng có thể thực thi của bạn tại thời gian xây dựng. Do đó, các tệp đối tượng trong thư viện tĩnh sẽ xuất hiện trong ứng dụng của bạn khi ứng dụng khởi chạy và không cần được giải quyết tại thời điểm khởi chạy ứng dụng thông qua trình liên kết động. Do đó, ứng dụng sử dụng liên kết tĩnh sẽ khởi chạy nhanh hơn. Điều này đi kèm với tệp nhị phân / tệp thực thi ứng dụng lớn hơn một chút, mặc dù cần lưu ý rằng kích thước thực thi lớn hơn sẽ được bù đắp bằng thiếu các thư viện động đi kèm.

Bạn có thể buộc liên kết tĩnh các phần phụ thuộc của 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 riêng biệt với tệp thực thi chính của ứng dụng. Các tệp này phải được tải tại thời điểm khởi chạy ứng dụng bằng trình liên kết. Tất cả các khung của Apple đều được liên kết một cách linh hoạt để 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 mục tiêu ứng dụng và mục tiêu tiện ích. Bạn không thể chia sẻ khung linh động giữa các ứng dụng riêng biệt, ngay cả khi cả hai ứng dụng đều được ký bởi cùng một ứng dụng nhà phát triển.

Nếu muốn sử dụng Firebase làm phần phụ thuộc của mục tiêu khung động, bạn cũng cần liên kết Firebase một cách linh động; nếu không, bạn sẽ gặp phải đị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 Tệp nhóm:

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

Xin lưu ý rằng tính nă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 là khi ứng dụng của bạn có nhiều phần phụ thuộc.