Kể từ 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 tạo dưới dạng khung tĩnh hay khung động. Bạn nên sử dụng các khung tĩnh, trừ phi bạn cần một số hành vi của thư viện động.
Xin 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ả khi dùng 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à Performance Monitoring. Tất cả các kênh phân phối khác, bao gồm cả tệp zip, Swift Package Manager 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 rằng bạn đã có kiến thức về cách hoạt động của tính năng liên kết động và tĩnh trên các 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:
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 việc tải các gói tài nguyên không thực thi, nên các thuật ngữ thư viện và khung được dùng thay thế cho nhau.
Liên kết tĩnh
Các thư viện được liên kết tĩnh sẽ được gói vào tệp thực thi ứng dụng của bạn tại thời điểm tạo. 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 được trình liên kết động phân giải tại thời điểm khởi chạy ứng dụng. Do đó, các ứng dụng sử dụng tính năng liên kết tĩnh sẽ khởi chạy nhanh hơn. Điều này phải trả giá bằng một tệp nhị phân / tệp thực thi ứng dụng lớn hơn một chút, mặc dù bạn nên lưu ý rằng kích thước tệp thực thi lớn hơn sẽ được bù đắp bằng 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ác phần phụ thuộc của Firebase bằng cách chỉ định rõ ràng mối liên kết trong Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
Liên kết động
Các 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 và phải được trình liên kết động tải vào thời điểm khởi chạy ứng dụng. Tất cả các khung của Apple đều được liên kết linh độ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 linh động để chia sẻ mã giữa các mục tiêu của ứng dụng và tiện ích. Bạn không thể chia sẻ các khung độ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 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 trùng lặp về 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 mối liên kết động trong Podfile:
# 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 biệt là nếu ứng dụng của bạn có nhiều phần phụ thuộc.