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

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

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

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

คุณสามารถบังคับใช้การลิงก์แบบคงที่ของไลบรารี 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

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