ลิงก์ทรัพยากร Dependency ของ Firebase แบบคงที่หรือแบบไดนามิก

ตั้งแต่ 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 หากไม่คุ้นเคยกับแนวคิดเหล่านี้ โปรดดูเอกสารประกอบต่อไปนี้

เนื่องจากเอกสารนี้เกี่ยวข้องกับประเภทการลิงก์ไลบรารี ไม่ใช่การโหลดแพ็กเกจทรัพยากรที่ไม่สามารถเรียกใช้ได้ เราจึงใช้คำว่าไลบรารีและเฟรมเวิร์กแทนกันได้

การลิงก์แบบคงที่

ไลบรารีที่ลิงก์แบบคงที่จะรวมอยู่ในไฟล์ปฏิบัติการของแอปพลิเคชัน ณ เวลาที่สร้าง ด้วยเหตุนี้ ไฟล์ออบเจ็กต์ในไลบรารีแบบคงที่จึงจะแสดงในแอปเมื่อเปิดใช้งาน และไม่จําเป็นต้องได้รับการแก้ไขเมื่อเปิดแอปโดยตัวลิงก์แบบไดนามิก ดังนั้นแอปที่ใช้การลิงก์แบบคงที่จึงเปิดได้เร็วขึ้น แต่ข้อเสียคือไฟล์ปฏิบัติการแบบไบนารี / แอปจะใหญ่ขึ้นเล็กน้อย แม้ว่าควรทราบว่าขนาดไฟล์ปฏิบัติการที่ใหญ่ขึ้นจะได้รับการชดเชยด้วยการไม่มีไลบรารีแบบไดนามิกที่รวมอยู่ด้วย

คุณสามารถบังคับใช้การลิงก์แบบคงที่ของไลบรารี Firebase โดยระบุการลิงก์ใน Podfile อย่างชัดเจน ดังนี้

# cocoapods >= 1.9.0
use_frameworks! :linkage => :static

การลิงก์แบบไดนามิก

ไลบรารีที่ลิงก์แบบไดนามิกจะจัดเก็บไว้ใน App Bundle แยกจากไฟล์ปฏิบัติการหลักของแอป และต้องโหลดโดยตัวลิงก์แบบไดนามิกเมื่อแอปเปิด เฟรมเวิร์กของ Apple ทั้งหมดจะลิงก์แบบไดนามิกเพื่อให้แชร์โค้ดระหว่างกระบวนการต่างๆ ได้ ในทำนองเดียวกัน คุณสามารถใช้เฟรมเวิร์กแบบไดนามิกเพื่อแชร์โค้ดระหว่างแอปกับเป้าหมายส่วนขยายได้ คุณไม่สามารถแชร์เฟรมเวิร์กแบบไดนามิกระหว่างแอปพลิเคชันแยกต่างหาก แม้ว่าทั้ง 2 แอปพลิเคชันจะลงนามโดยนักพัฒนาแอปคนเดียวกันก็ตาม

หากต้องการใช้ Firebase เป็นทรัพยากรของเป้าหมายเฟรมเวิร์กแบบไดนามิก คุณจะต้องลิงก์ Firebase แบบไดนามิกด้วย ไม่เช่นนั้นคุณจะพบคําจํากัดความคลาสที่ซ้ำกันในรันไทม์ของแอป การลิงก์แบบไดนามิกเป็นลักษณะการทำงานเริ่มต้นของ use_frameworks! แต่คุณยังคงระบุการลิงก์แบบไดนามิกใน Podfile ได้อย่างชัดเจน ดังนี้

# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic

โปรดทราบว่าการลิงก์แบบไดนามิกอาจเพิ่มเวลาในการเปิดแอป โดยเฉพาะอย่างยิ่งหากแอปของคุณมีทรัพยากรจำนวนมาก