เชื่อมโยงการพึ่งพา Firebase แบบคงที่หรือแบบไดนามิก dynamic

เริ่มต้นด้วย CocoaPods 1.9.0 และ Firebase 7 คุณสามารถเลือกได้ว่าจะให้การพึ่งพา Firebase ของคุณสร้างขึ้นเป็นเฟรมเวิร์กแบบสแตติกหรือไดนามิก เราขอแนะนำให้ใช้เฟรมเวิร์กแบบคงที่ เว้นแต่ว่าคุณต้องการลักษณะการทำงานของไลบรารีแบบไดนามิกบางอย่าง

โปรดทราบว่าไลบรารีที่พัฒนานอก GitHub สามารถเชื่อมโยงแบบสแตติกได้เฉพาะกับ CocoaPods 1.9.0 และใหม่กว่า ในปัจจุบัน รายการไลบรารีนี้ประกอบด้วย AdMob, Analytics, Firebase ML และการตรวจสอบประสิทธิภาพ ช่องทางการจัดจำหน่ายอื่นๆ ทั้งหมด รวมถึงไฟล์ zip, Swift Package Manager และ Carthage ให้ไลบรารีที่ลิงก์แบบสแตติกเท่านั้น

เอกสารนี้ใช้ความรู้ในการทำงานของการเชื่อมโยงแบบไดนามิกและแบบคงที่บนแพลตฟอร์ม Apple หากคุณไม่คุ้นเคยกับแนวคิดเหล่านี้ โปรดดูเอกสารประกอบต่อไปนี้:

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

การเชื่อมโยงแบบคงที่

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

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

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

การเชื่อมโยงแบบไดนามิก

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

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

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

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