ตั้งแต่ CocoaPods 1.9.0 และ Firebase 7 เป็นต้นไป คุณสามารถเลือกว่าจะสร้าง Dependency ของ Firebase เป็นเฟรมเวิร์กแบบคงที่หรือแบบไดนามิก เราขอแนะนำให้ใช้เฟรมเวิร์กแบบคงที่ เว้นแต่คุณต้องการลักษณะการทำงานของไลบรารีแบบไดนามิกบางอย่าง
โปรดทราบว่าไลบรารีที่พัฒนาขึ้นนอก GitHub จะลิงก์ได้แบบคงที่เท่านั้น แม้จะใช้ CocoaPods 1.9.0 ขึ้นไปก็ตาม ปัจจุบัน รายการไลบรารีนี้รวมถึง AdMob, Analytics, Firebase ML, และ Performance Monitoring ช่องทางการเผยแพร่อื่นๆ ทั้งหมด รวมถึงไฟล์ zip, Swift Package Manager และ Carthage จะมีเพียงไลบรารีที่ลิงก์แบบคงที่
เอกสารนี้ถือว่าคุณมีความรู้ความเข้าใจเกี่ยวกับการลิงก์แบบไดนามิกและแบบคงที่บนแพลตฟอร์ม Apple หากไม่คุ้นเคยกับแนวคิดเหล่านี้ โปรดดูเอกสารต่อไปนี้
เนื่องจากเอกสารนี้เกี่ยวข้องกับประเภทการลิงก์ไลบรารี ไม่ใช่การโหลดชุดทรัพยากรที่ไม่สามารถเรียกใช้งานได้ เราจึงใช้คำว่า ไลบรารีและ เฟรมเวิร์กแทนกันได้
การลิงก์แบบคงที่
ระบบจะรวมไลบรารีที่ลิงก์แบบคงที่ไว้ในไฟล์ที่เรียกใช้งานได้ของแอปพลิเคชันในระหว่างเวลาบิลด์ ด้วยเหตุนี้ ไฟล์ออบเจ็กต์ในไลบรารีแบบคงที่จะอยู่ในแอปเมื่อเปิดตัว และไม่จำเป็นต้องแก้ไขโดยตัวลิงก์แบบไดนามิกในระหว่างการเปิดตัวแอป ดังนั้น แอปที่ใช้การลิงก์แบบคงที่จะเปิดตัวได้เร็วขึ้น อย่างไรก็ตาม ไฟล์ไบนารี / ไฟล์ปฏิบัติการของแอปจะมีขนาดใหญ่ขึ้นเล็กน้อย แต่ควรทราบว่าขนาดไฟล์ปฏิบัติการที่ใหญ่ขึ้นจะได้รับการชดเชยด้วยการไม่มีไลบรารีแบบไดนามิกที่รวมไว้
คุณสามารถบังคับให้ลิงก์ Dependency ของ Firebase แบบคงที่ได้โดยระบุการลิงก์อย่างชัดเจนใน Podfile ดังนี้
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
การลิงก์แบบไดนามิก
ระบบจะจัดเก็บไลบรารีที่ลิงก์แบบไดนามิกไว้ใน App Bundle แยกจากไฟล์ที่เรียกใช้งานได้หลักของแอป และตัวลิงก์แบบไดนามิกจะต้องโหลดไลบรารีเหล่านี้ในระหว่างการเปิดตัวแอป เฟรมเวิร์กของ Apple ทั้งหมดจะลิงก์แบบไดนามิกเพื่อให้สามารถแชร์โค้ดระหว่างกระบวนการต่างๆ ได้ ในทำนองเดียวกัน คุณสามารถใช้เฟรมเวิร์กแบบไดนามิกเพื่อแชร์โค้ดระหว่างเป้าหมายของแอปและส่วนขยาย คุณไม่สามารถแชร์เฟรมเวิร์กแบบไดนามิกระหว่างแอปพลิเคชันที่แยกกันได้ แม้ว่าทั้ง 2 แอปพลิเคชันจะลงชื่อโดยนักพัฒนาซอฟต์แวร์คนเดียวกันก็ตาม
หากต้องการใช้ Firebase เป็นทรัพยากร Dependency ของเป้าหมายเฟรมเวิร์กแบบไดนามิก คุณต้องลิงก์ Firebase แบบไดนามิกด้วย ไม่เช่นนั้นคุณจะพบคำจำกัดความของคลาสที่ซ้ำกันในรันไทม์ของแอป การลิงก์แบบไดนามิกเป็นลักษณะการทำงานเริ่มต้นของ use_frameworks! แต่คุณยังคงระบุการลิงก์แบบไดนามิกใน Podfile ได้อย่างชัดเจน ดังนี้
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
โปรดทราบว่าการลิงก์แบบไดนามิกอาจเพิ่มเวลาในการเปิดตัวแอป โดยเฉพาะอย่างยิ่งหากแอปมี Dependency จำนวนมาก