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

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

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

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

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

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

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

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

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

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

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

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