File Provider Extension เป็นกลไกของ iOS ที่ช่วยให้บริการคลาวด์และแอปพลิเคชันแสดงไฟล์ของตนในแอป Files ของระบบ ผู้ใช้เห็นเอกสารภายนอกในอินเทอร์เฟซแบบรวมพร้อมกับเอกสารภายในเครื่อง และสามารถเปิด ย้าย และแก้ไขได้โดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติม ตามเอกสารสำหรับนักพัฒนาของ Apple (2025) NSFileProviderManager ให้การซิงโครไนซ์แบบเพิ่มหน่วยและจัดการเวอร์ชันไฟล์ผ่านแคชของตัวเองบนอุปกรณ์
ประเด็นสำคัญ
File Provider Extension เป็นส่วนขยายแอปที่เพิ่มแหล่งเอกสารใหม่ให้กับแอป Files บริการคลาวด์ — Google Drive, Dropbox, OneDrive หรือพื้นที่จัดเก็บขององค์กร — สามารถแสดงโครงสร้างไฟล์ของตนได้โดยตรงในอินเทอร์เฟซระบบ โดยไม่ต้องเปิดแอปแยกต่างหาก
ผู้ใช้ทำงานกับไฟล์ระยะไกลเหมือนกับไฟล์ที่บันทึกไว้ในอุปกรณ์ทุกประการ: เรียกดูเนื้อหาโฟลเดอร์ ลากและวางเอกสาร เปิดในแอปที่เข้ากันได้ และบันทึกการเปลี่ยนแปลงกลับไปยังคลาวด์ ตามข้อมูลของ WWDC 2025 File Provider Extension รองรับการดำเนินการซิงโครไนซ์พร้อมกันสูงสุด 1,000 รายการและปรับตัวตามความเร็วเครือข่ายผ่านการจัดการลำดับความสำคัญแบบไดนามิก
ส่วนขยายทำงานในพื้นหลัง — iOS เปิดใช้งานเมื่อจำเป็นต้องซิงโครไนซ์และสามารถบังคับยุติเมื่อทรัพยากรต่ำ การดำเนินการทั้งหมดต้องเป็น idempotent และรองรับการดำเนินการต่อจากจุดตรวจสอบ
File Provider Extension มีสถาปัตยกรรมสามชั้น: กระบวนการระบบ Files.app, ส่วนขยายโปรวายเดอร์ และเซิร์ฟเวอร์ระยะไกล ระบบขอข้อมูลจากส่วนขยาย ส่วนขยายแปลงคำขอเป็นการเรียก API ของบริการคลาวด์ และส่งคืนผลลัพธ์ผ่าน NSFileProviderItem
แทนที่จะโหลดโครงสร้างไฟล์ทั้งหมดทุกครั้งที่มีการอัปเดต ส่วนขยายจะส่งเฉพาะ รายการที่เปลี่ยนแปลง เท่านั้น NSFileProviderManager มีวิธีการสำหรับส่งการอัปเดตแบบเพิ่มหน่วย — “เพิ่มไฟล์ A”, “แก้ไขไฟล์ B”, “ลบโฟลเดอร์ C” ซึ่งช่วยลดปริมาณการรับส่งข้อมูลได้อย่างมากและเร่งการแสดงการเปลี่ยนแปลง
ตามข้อมูลของ Apple Engineering การซิงโครไนซ์แบบเพิ่มหน่วยลดปริมาณการถ่ายโอนข้อมูลลง 60–80% เมื่อเทียบกับการโหลดซ้ำทั้งหมด แนะนำให้ใช้ NSFileProviderSyncAnchor เพื่อทำเครื่องหมายสถานะการซิงโครไนซ์และลดคำขอที่ซ้ำกัน
File Provider Extension สามารถแคชไฟล์ในเครื่องเพื่อการเข้าถึงแบบออฟไลน์ เมื่อเปิดไฟล์ ระบบจะส่งคำขอไปยังส่วนขยาย และส่วนขยายจะตัดสินใจว่าจะดาวน์โหลดเนื้อหาจากเซิร์ฟเวอร์หรือส่งคืนเวอร์ชันที่แคชไว้แล้ว NSFileProviderItem ระบุระดับการแคชผ่านฟิลด์ isDownloaded และ isUploaded
Apple แนะนำให้กำหนดค่านโยบายการแคชตามขนาดไฟล์: สำหรับรูปภาพและเอกสาร — แคชทั้งหมด, สำหรับวิดีโอ — เฉพาะตัวอย่าง, สำหรับไฟล์เก็บถาวร — ตามคำขอของผู้ใช้
NSFileProviderManager เป็นคลาสกลางที่ส่วนขยายใช้โต้ตอบกับระบบ มันมีวิธีการแจ้งระบบเกี่ยวกับการเปลี่ยนแปลง สร้างรายการใหม่ จัดการการดาวน์โหลด และจัดการข้อผิดพลาด แต่ละอินสแตนซ์ของ NSFileProviderManager ผูกกับโดเมนเฉพาะ
signalEnumerator(for:) — แจ้งระบบว่าเนื้อหาโฟลเดอร์เปลี่ยนแปลงและต้องอ่านใหม่ reimportItem(_:) — นำเข้ารายการที่ระบุอีกครั้งหลังจากการเปลี่ยนแปลงฝั่งเซิร์ฟเวอร์ registerURLSessionTask:forItemWithIdentifier: — เชื่อมโยงการดาวน์โหลดพื้นหลังกับไฟล์เฉพาะเพื่อติดตามความคืบหน้า
ข้อจำกัดสำคัญ: NSFileProviderManager ทำงานเฉพาะในกระบวนการของส่วนขยายเท่านั้น แอปหลักไม่สามารถเรียกใช้วิธีการโดยตรงเพื่อจัดการโครงสร้างไฟล์ — การซิงโครไนซ์ต้องเริ่มต้นโดยส่วนขยายหรือระบบ
let manager = NSFileProviderManager.default()
manager.signalEnumerator(for: workingSet) { error in
if let error = error {
print("Signal failed: \(error)")
}
}
สำหรับการดาวน์โหลดไฟล์ในพื้นหลัง NSFileProviderManager ใช้ URLSession พร้อมการกำหนดค่าพื้นหลัง ส่วนขยายสร้างงานดาวน์โหลดและลงทะเบียนกับผู้จัดการ ซึ่งเชื่อมโยงกับรายการที่เกี่ยวข้อง ระบบจะติดตามความคืบหน้าและลำดับความสำคัญของการดาวน์โหลดโดยอัตโนมัติตามกิจกรรมของผู้ใช้
การสร้าง File Provider Extension เริ่มต้นด้วยการเพิ่ม target ใหม่ใน Xcode ด้วยเทมเพลต File Provider Extension Xcode จะสร้างคลาสที่สืบทอดจาก NSFileProviderExtension และชุดวิธีการขั้นต่ำสำหรับการทำงานกับรายการโดยอัตโนมัติ
แต่ละรายการในโครงสร้างไฟล์ — ไฟล์หรือโฟลเดอร์ — implement โปรโตคอล NSFileProviderItem โปรโตคอลกำหนดฟิลด์ที่จำเป็น: itemIdentifier, parentItemIdentifier, filename, typeIdentifier และ capabilities นอกจากนี้ คุณสามารถระบุขนาด วันที่แก้ไข และแฟล็กการดาวน์โหลด
struct CloudItem: NSFileProviderItem {
let itemIdentifier: NSFileProviderItemIdentifier
let parentItemIdentifier: NSFileProviderItemIdentifier
let filename: String
let typeIdentifier: String
let capabilities: NSFileProviderItemCapabilities
let documentSize: NSNumber?
}
วิธีการ enumerator(for:) ส่งคืนออบเจกต์ที่ implement NSFileProviderEnumerator ซึ่งให้เนื้อหาโฟลเดอร์ตามคำขอของระบบ iOS อาจขอการแจงนับสำหรับโฟลเดอร์ราก โฟลเดอร์ย่อย และชุดทำงาน — ส่วนหลังใช้สำหรับแสดงไฟล์ล่าสุดหรือไฟล์โปรด
Apple แนะนำให้ใช้วิธีการแจงนับแบบอะซิงโครนัสพร้อมการแบ่งหน้าผ่าน NSFileProviderPage เพื่อหลีกเลี่ยงการโหลดรายการนับพันรายการพร้อมกัน หน้าที่มี 50–100 รายการเหมาะสมที่สุดสำหรับประสิทธิภาพ
NSFileProviderDomain เป็นกลไกสำหรับแยกบัญชีต่าง ๆ ภายในส่วนขยายเดียว หากผู้ใช้อนุญาตหลายบัญชีในแอป — Google Drive ส่วนตัวและขององค์กร — แต่ละบัญชีจะสร้างโดเมนแยกต่างหาก ซึ่งปรากฏเป็นแหล่งที่มาแยกต่างหากในแอป Files
แต่ละโดเมนมีตัวระบุเฉพาะ ชื่อที่แสดง และสถานะ ผู้ใช้สามารถปิดใช้งานโดเมนชั่วคราวหรือลบโดเมนได้โดยไม่กระทบบัญชีอื่น ๆ ระบบเริ่มกระบวนการส่วนขยายแยกต่างหากสำหรับแต่ละโดเมนที่ใช้งานอยู่ ซึ่งรับประกันการแยกข้อมูลระหว่างบัญชี
ตามข้อมูลของ Apple แนะนำให้ไม่สร้างโดเมนเกิน 10 โดเมนต่อส่วนขยาย — จำนวนที่มากเกินไปจะทำให้การเปิดแอป Files ช้าลงและเพิ่มการใช้หน่วยความจำ สำหรับบริการที่มีบัญชีจำนวนมาก ควรรวมไว้ในโดเมนเดียวกับการสลับโปรไฟล์ภายในส่วนขยาย
let domain = NSFileProviderDomain(
identifier: "work",
displayName: "Corporate Drive"
)
NSFileProviderManager.add(domain) { error in
if let error = error {
print("Failed to add domain: \(error)")
}
}
คำถามที่พบบ่อย
ทุกบริการสามารถ implement ส่วนขยายของตนเองได้ ในบรรดาที่รองรับ — Google Drive, Dropbox, Microsoft OneDrive, Box, iCloud Drive และ Nextcloud ส่วนขยายนี้ใช้งานได้กับพื้นที่จัดเก็บ REST หรือ WebDAV ทุกประเภท
ส่วนขยายได้รับการแจ้งเตือนจากระบบเกี่ยวกับการเปลี่ยนแปลงไฟล์ในเครื่องและส่งไปยังเซิร์ฟเวอร์ผ่าน NSFileProviderManager สำหรับการซิงโครไนซ์ย้อนกลับจากเซิร์ฟเวอร์ ใช้ NSFileProviderSyncAnchor — ตัวบ่งชี้การอัปเดตล่าสุด
ได้ หากไฟล์ถูกแคชไว้ในเครื่อง NSFileProviderItem ทำเครื่องหมายไฟล์ที่ดาวน์โหลดด้วยแฟล็ก isDownloaded การเปลี่ยนแปลงที่ทำในโหมดออฟไลน์จะซิงโครไนซ์โดยอัตโนมัติเมื่อเชื่อมต่อใหม่
ไม่มีข้อจำกัดโดยตรง — ขนาดถูกกำหนดโดยความสามารถของเซิร์ฟเวอร์ Apple แนะนำให้แคชไฟล์สูงสุด 100 MB โดยอัตโนมัติ และสำหรับไฟล์ขนาดใหญ่ ให้ใช้การดาวน์โหลดแบบสตรีมมิ่งพร้อมแถบความคืบหน้า
UIDocumentPickerViewController ให้การเลือกไฟล์ครั้งเดียวผ่านหน้าต่างโมดอล File Provider Extension ฝังแหล่งเอกสารถาวรในแอป Files ด้วยการซิงโครไนซ์พื้นหลังและการเข้าถึงระยะยาว
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ