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

เริ่มต้นด้วย 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

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