ลิงก์ทรัพยากร Dependency ของ Firebase แบบคงที่หรือแบบไดนามิก

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

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

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

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

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

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

คุณบังคับการลิงก์แบบคงที่ของทรัพยากร Dependency ของ Firebase ได้โดยระบุการลิงก์อย่างชัดเจนใน Podfile ดังนี้

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

การลิงก์แบบไดนามิก

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

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

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

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