File Provider Extension: این چیست و چگونه فراه‌کننده فایل iOS کار می‌کند

نویسنده: IT Sectr منتشر شده: 2026-06-15 زمان مطالعه: 9 دقیقه

File Provider Extension — این یک مکانیزم iOS است که به خدمات ابری و برنامه‌ها اجازه می‌دهد فایل‌های خود را در برنامه سیستمی فایل‌ها نمایش دهند. کاربر اسناد خارجی را در یک رابط واحد در کنار فایل‌های محلی می‌بیند و می‌تواند آن‌ها را بدون نصب نرم‌افزار اضافه باز کند، جابجا کند و ویرایش کند. به گزارش Apple Developer Documentation (2025)، NSFileProviderManager همگام‌سازی افزایشی را تامین و نسخه‌های فایل را از طریق کش مخصوص خود در دستگاه مدیریت می‌کند.

نکات کلیدی

  • File Provider Extension ذخیره‌سازی‌های ابری و خدمات فایلی را در برنامه سیستمی فایل‌ها در iOS ادغام می‌کند
  • معماری بر پروتکل NSFileProviderExtension و مدیر NSFileProviderManager برای همگام‌سازی داده‌ها استوار دارد
  • افزونه از همگام‌سازی افزایشی پشتیبانی می‌کند — فقط بلوک‌های تغییریافته انتقال می‌یابند، نه فایل‌های کامل
  • هر فایل توسط شیء NSFileProviderItem با فراواینه: اندازه، تاریخ تغییر، نوع محتوا و مجوزهای دسترسی نمایش داده می‌شود
  • دومین‌ها (NSFileProviderDomain) جداسازی حساب‌های مختلف را در یک افزونه ممکن می‌سازند

File Provider Extension چیست در iOS

File Provider Extension — این یک افزونه برنامه است که منابع جدیدی از اسناد را به برنامه فایل‌ها اضافه می‌کند. یک خدمت ابری — Google Drive، Dropbox، OneDrive یا یک ذخیره سازمانی — می‌تواند ساختار فایلی خود را مستقیماً در رابط سیستمی، بدون باز کردن یک برنامه جداگانه، نمایش دهد.

کاربر با فایل‌های دورامد دقیقاً مانند فایل‌های ذخیره‌شده در دستگاه کار می‌کند: محتوای پوشه‌ها را مرور می‌کند، اسناد را کشیده و رها می‌کند، آن‌ها را در هر برنامه مناسبی باز می‌کند و تغییرات را به ابر برمی‌گرداند. به گزارش WWDC 2025، File Provider Extension از تا 1000 عملیات همگام‌سازی همزمان پشتیبانی کرده و از طریق مدیریت پویای اولویت‌ها خود را با سرعت شبکه سازگار می‌کند.

افزونه در پشزمینه کار می‌کند — 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 — کلاس مرکزی است که افزونه از طریق آن با سیستم ارتباط برقرار می‌کند. آن روش‌هایی برای اطلاع سیستم از تغییرات، ایجاد عناصر جدید، مدیریت دانلودها و پردازش خطاها ارائه می‌دهد. هر نمونه NSFileProviderManager به یک دومین مشخص وابسته است.

روش‌های کلیدی

signalEnumerator(for:) — به سیستم اطلاع می‌دهد که محتوای پوشه تغییر کرده و لیست باید مجدداً خوانده شود. reimportItem(_:) — عنصر مشخص شده را پس از تغییر در سرور مجدداً واردات می‌کند. registerURLSessionTask:forItemWithIdentifier: — دانلود پس‌زمینه را به یک فایل مشخص برای پیگیری پیشرفت متصل می‌کند.

مهمترین محدودیت: NSFileProviderManager فقط در فرآیند افزونه کار می‌کند. برنامه اصلی نمی‌تواند مستقیماً روش‌های آن را برای مدیریت ساختار فایل فراخوانی کند — همگام‌سازی باید توسط افزونه یا سیستم آغاز شود.

swift
let manager = NSFileProviderManager.default()
manager.signalEnumerator(for: workingSet) { error in
    if let error = error {
        print("Signal failed: \(error)")
    }
}

مدیریت دانلودها

برای دانلود فایل‌ها در پس‌زمینه، NSFileProviderManager از URLSession با پیکربندی پس‌زمینه استفاده می‌کند. افزونه یک وظیفه دانلود ایجاد کرده و آن را در مدیر ثبت می‌کند، که آن را به عنصر مربوطه می‌چسباند. سیستم به طور خودکار پیشرفت و اولویت‌های دانلود را بر اساس فعالیت کاربر پیگیری می‌کند.

پیاده‌سازی File Provider Extension

ایجاد File Provider Extension با افزودن یک target جدید در Xcode با قالب File Provider Extension آغاز می‌شود. Xcode به طور خودکار یک کلاس ارث‌بر از NSFileProviderExtension و یک مجموعه حداقل از روش‌ها برای کار با عناصر تولید می‌کند.

NSFileProviderItem و فراواینه

هر عنصر از ساختار فایل — فایل یا پوشه — پروتکل NSFileProviderItem را پیاده‌سازی می‌کند. پروتکل فیلدهای الزامی را مشخص می‌کند: itemIdentifier، parentItemIdentifier، filename، typeIdentifier و capabilities. به طور اختیاری می‌توان اندازه، تاریخ تغییر و فلگ‌های دانلود را نیز مشخص کرد.

swift
struct CloudItem: NSFileProviderItem {
    let itemIdentifier: NSFileProviderItemIdentifier
    let parentItemIdentifier: NSFileProviderItemIdentifier
    let filename: String
    let typeIdentifier: String
    let capabilities: NSFileProviderItemCapabilities
    let documentSize: NSNumber?
}

پردازش درخواست‌های شمارش

روش enumerator(for:) یک شیء را برمی‌گرداند که NSFileProviderEnumerator را پیاده‌سازی می‌کند، که محتوای پوشه را به درخواست سیستم ارائه می‌دهد. iOS می‌تواند شمارش را برای پوشه ریشه، زیرپوشه‌ها و مجموعه کاری درخواست کند — آخری برای نمایش فایل‌های اخیر یا مورد علاقه استفاده می‌شود.

Apple استفاده از روش‌های شمارش ناهمگام با صفحه‌بندی از طریق NSFileProviderPage را برای جلوگیری از بارگیری هزاران عنصر به صورت همزمان توصیه می‌کند. صفحات 50–100 عنصری برای کارایی بهینه هستند.

دومین‌ها و معماری چندحسابی

NSFileProviderDomain — مکانیزمی برای جداسازی حساب‌های مختلف در یک افزونه. اگر کاربر چندین حساب را در برنامه مجاز کرده باشد — شخصی و سازمانی Google Drive — هر حساب یک دومین جدید ایجاد می‌کند که به عنوان یک منبع جداگانه در برنامه فایل‌ها نمایش داده می‌شود.

هر دومین یک شناسه منحصربه‌فرد، نام نمایشی و وضعیت دارد. کاربر می‌تواند دومین‌ها را بدون تأثیر بر سایر حساب‌ها موقتاً غیرفعال کند یا حذف کند. سیستم برای هر دومین فعال یک فرآیند افزونه جداگانه راه‌اندازی می‌کند که انزوای داده‌ها را بین حساب‌ها تامین می‌کند.

به گزارش Apple، توصیه می‌شود بیش از 10 دومین برای یک افزونه ایجاد نکنید — تعداد زیاد راه‌اندازی برنامه فایل‌ها را کند کرده و مصرف حافظه را افزایش می‌دهد. برای خدمات با تعداد زیاد حساب، بهتر است آن‌ها را در یک دومین با تغییر پروفایل در داخل افزونه تجمیع کنید.

swift
let domain = NSFileProviderDomain(
    identifier: "work",
    displayName: "Corporate Drive"
)
NSFileProviderManager.add(domain) { error in
    if let error = error {
        print("Failed to add domain: \(error)")
    }
}

سوالات متداول

کدام خدمات ابری از File Provider Extension پشتیبانی می‌کنند؟

هر خدمتی می‌تواند افزونه خود را پیاده‌سازی کند. در میان پشتیبانی‌کنندگان شامل Google Drive، Dropbox، Microsoft OneDrive، Box، iCloud Drive و Nextcloud هستند. افزونه برای هر ذخیره REST یا WebDAV جهانی است.

افزونه چگونه تغییرات را با سرور همگام می‌کند؟

افزونه از سیستم درباره تغییرات فایل‌های محلی اطلاعیه دریافت کرده و آن‌ها را از طریق NSFileProviderManager به سرور ارسال می‌کند. برای همگام‌سازی برعکس از سرور از NSFileProviderSyncAnchor — نشانگر آخرین به‌روزرسانی استفاده می‌شود.

آیا افزونه می‌تواند آفلاین کار کند؟

بله، اگر فایل‌ها به صورت محلی ذخیره شده باشند. NSFileProviderItem فایل‌های دانلودشده را با فلگ isDownloaded علامت‌گذاری می‌کند. تغییراتی که در حالت آفلاین انجام شده باشند پس از بازگشت اتصال به طور خودکار همگام می‌شوند.

چه محدودیت‌هایی برای اندازه فایل وجود دارد؟

محدودیت مستقیمی وجود ندارد — اندازه توسط قابلیت‌های سرور تعیین می‌شود. Apple توصیه می‌کند فایل‌ها را تا 100 مگابایت به طور خودکار ذخیره کنید و برای فایل‌های بزرگ‌تر از دانلود جریانی با نمودار پیشرفت استفاده کنید.

تفاوت NSFileProviderExtension و UIDocumentPickerViewController چیست؟

UIDocumentPickerViewController انتخاب یکباره فایل را از طریق یک پنجره مودال فراهم می‌کند. File Provider Extension یک منبع دائم اسناد را با همگام‌سازی پس‌زمینه و دسترسی بلندمدت در برنامه فایل‌ها جای‌گذاری می‌کند.

خلاصه

  • File Provider Extension خدمات فایل خارجی را در برنامه فایل‌ها ادغام کرده، اسناد دورامد را در یک رابط واحد در دسترس قرار می‌دهد
  • معماری از NSFileProviderExtension و NSFileProviderManager برای همگام‌سازی افزایشی داده‌ها با سرور استفاده می‌کند
  • NSFileProviderItem یک فایل یا پوشه را با مجموعه کاملی از فراواینه و قابلیت‌ها نمایش می‌دهد
  • دومین‌ها (NSFileProviderDomain) معماری چندحسابی با انزوای داده‌ها بین حساب‌ها فراهم می‌کنند
  • ذخیره سازی در دستگاه به کار با فایل‌ها در حالت آفلاین با همگام‌سازی خودکار پس از بازگشت اتصال اجازه می‌دهد
  • همگام‌سازی افزایشی ترافیک را در مقایسه با بارگیری کامل ساختار فایل 60–80% کاهش می‌دهد

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید