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 động. Chúng tôi khuyên bạn nên sử dụng khung tĩnh trừ khi bạn yêu cầu một số 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 nền tảng 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 liên quan đến các kiểu 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ể thực thi nên các thuật ngữ 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 gói vào ứng dụng của bạn có thể thực thi được 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 phải được trình liên kết động giải quyết 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 dẫn đến việc phải trả giá bằng tệp thực thi nhị phân/ứ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 do 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 Firebase bằng cách chỉ định rõ ràng liên kết trong Podfile của mình:

# 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 của bạn riêng biệt với tệp thực thi chính của ứng dụng và chúng 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 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 khung động để chia sẻ mã giữa mục tiêu ứng dụng và tiện ích mở rộng của mình. 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 đều được ký bởi cùng một nhà phát triển.

Nếu bạn 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 động Firebase; nếu không, bạn sẽ gặp phải các định nghĩa lớp trùng lặp trong thời gian chạy ứng dụng của mình. 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ể 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ần phụ thuộc.