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