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 xem các phần phụ thuộc Firebase có được tạo dưới dạng khung tĩnh hoặc động hay không. Bạn nên dùng khung tĩnh, trừ phi bạn yêu cầu một số hành vi nhất định 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ả 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 cả 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 bạn đã nắm được kiến thức thực hành về liên kết động và liên kết tĩnh trên các nền tảng của Apple. Nếu bạn chưa hiểu rõ các khái niệm này, hãy xem tài liệu sau:

Vì tài liệu này đề cập đến các kiểu liên kết thư viện chứ không phải là tải gói tài nguyên không thể thực thi, nên các thuật ngữ library (thư viện) và framework (khung) đượ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 tệp thực thi của ứng dụng 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ẽ xuất hiện trong ứng dụng của bạn khi ứng dụng khởi chạy và bạn không cần trình liên kết động giải quyết các tệp đối tượng này tại 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 sẽ khiến tệp thực thi/tệp thực thi của ứng dụng/tệp 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ằ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 của mình:

# 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 tách biệt với tệp thực thi chính của ứng dụng. Đồng thời, các thư viện này phải được tải bằng trình liên kết động tại 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 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 khung động để chia sẻ mã giữa ứng dụng và mục tiêu 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 ứng dụng đó đều do cùng một nhà phát triển ký.

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 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à khi ứng dụng có nhiều phần phụ thuộc.