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