ตั้งแต่ CocoaPods 1.9.0 และ Firebase 7 เป็นต้นไป คุณจะเลือกได้ว่าจะให้สร้าง Firebase Dependencies เป็นเฟรมเวิร์กแบบคงที่หรือแบบไดนามิก เราขอแนะนําให้ใช้เฟรมเวิร์กแบบคงที่ เว้นแต่คุณต้องการลักษณะการทํางานของไลบรารีแบบไดนามิกบางอย่าง
โปรดทราบว่าไลบรารีที่พัฒนานอก 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
โปรดทราบว่าการลิงก์แบบไดนามิกอาจเพิ่มเวลาในการเปิดแอป โดยเฉพาะอย่างยิ่งหากแอปของคุณมีทรัพยากรจำนวนมาก