File Provider Extension: چیست، توسعه دسترسی به فایل‌های iOS

نویسنده: IT Sectr منتشر شده: 2026-07-11 زمان مطالعه: 6 دقیقه

File Provider Extension مکانیزمی در iOS است که به برنامه‌ها اجازه می‌دهد از طریق برنامه داخلی Files به فایل‌های منابع خارجی دسترسی ارائه دهند. بر اساس Apple Developer Documentation, 2024، File Provider Extension امکان نمایش فایل‌ها از ذخیره‌سازهای ابری، سرورها و سیستم‌های فایل سفارشی را مستقیماً در Files.app فراهم می‌کند — بدون نیاز به وارد کردن محلی آن‌ها. کاربر یک رابط واحد برای کار با فایل‌ها بدون توجه به مکان فیزیکی آن‌ها دریافت می‌کند.

نکات اصلی

  • File Provider Extension — توسعه iOS برای ادغام سیستم‌های فایل خارجی با Files.app
  • NSFileProviderManager — API اصلی برای مدیریت فایل‌ها و همگام‌سازی وضعیت
  • دو حالت کار: Foundation-based و FileProviderUI برای سناریوهای مختلف ادغام
  • ارائه‌دهندگان می‌توانند جستجو، سلسله مراتب پوشه‌ها و برچسب‌ها را از طریق NSFileProviderItem پیاده‌سازی کنند
  • امنیت از طریق Sandbox تأمین می‌شود — توسعه به صورت ایزوله از برنامه کار می‌کند

File Provider Extension در iOS چیست؟

File Provider Extension یک توسعه برنامه در iOS و macOS است که به برنامه اجازه می‌دهد از طریق برنامه سیستم Files به فایل‌های منابع خارجی دسترسی ارائه دهد. این ویژگی در iOS 11 ظاهر شد و مکانیزم Document Provider را جایگزین کرد و پشتیبانی از همگام‌سازی، جستجو و برچسب‌ها را اضافه نمود.

وظیفه اصلی File Provider Extension ایفای نقش پل بین ذخیره‌ساز خارجی (سرور ابری، NAS سازمانی، FTP) و Files.app است. کاربر فایل‌ها و پوشه‌ها را طوری می‌بیند که گویی به صورت محلی ذخیره شده‌اند، در حالی که داده‌ها ممکن است روی یک سرور راه دور باشند. توسعه در پس‌زمینه کار می‌کند و محتوا را در صورت نیاز همگام‌سازی می‌کند.

بر اساس WWDC 2024، اپل به طور فعال FileProvider API را توسعه می‌دهد: پشتیبانی از همگام‌سازی افزایشی، بهبود عملکرد برای دایرکتوری‌های بزرگ و امکان عملیات گروهی اضافه شده است. این باعث می‌شود File Provider Extension روش ترجیحی برای ادغام فایل‌های خارجی در اکوسیستم اپل باشد.

File Provider Extension چگونه کار می‌کند

معماری File Provider Extension از دو مؤلفه تشکیل شده است: توسعه اصلی (نوع ارائه‌دهنده فایل) و توسعه UI اختیاری برای احراز هویت و پیکربندی. توسعه اصلی پروتکل NSFileProviderExtension را پیاده‌سازی می‌کند و تمام درخواست‌های Files.app را پردازش می‌کند.

swift
import FileProvider

class CloudFileProvider: NSFileProviderExtension {
    override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
        guard let item = storage
            .item(for: identifier) else {
            throw NSError(domain: NSFileProviderErrorDomain,
                              code: NSFileProviderError.noSuchItem.rawValue)
        }
        return item
    }

    override func urlForItem(with identifier: NSFileProviderItemIdentifier) -> URL {
        return fileCoordinator.urlForItem(with: identifier)
    }
}

وقتی کاربر Files.app را باز می‌کند و ارائه‌دهنده شما را انتخاب می‌کند، سیستم توسعه را در یک فرآیند پس‌زمینه راه‌اندازی می‌کند. توسعه رابط کاربری ندارد — این یک فرآیند headless است که درخواست‌های خواندن، نوشتن، تغییر نام و حذف فایل‌ها را پردازش می‌کند. تمام عملیات به صورت ناهمزمان از طریق NSFileProviderManager انجام می‌شود.

نکته مهم: File Provider Extension در یک فرآیند جداگانه زندگی می‌کند و ممکن است در صورت کمبود حافظه توسط سیستم خاتمه یابد. بنابراین ارائه‌دهنده باید بتواند وضعیت را پس از راه‌اندازی مجدد بازیابی کند، شناسه‌ها و حافظه نهان همگام‌سازی را در حافظه دائمی ذخیره نماید.

مدل NSFileProviderItem: فایل‌ها و پوشه‌ها

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

ویژگینوعتوضیحات
itemIdentifierNSFileProviderItemIdentifierشناسه یکتای عنصر در سیستم ارائه‌دهنده
parentItemIdentifierNSFileProviderItemIdentifierشناسه پوشه والد (ریشه — .rootContainer)
filenameStringنام فایل با پسوند
typeIdentifierString (UTType)شناسه نوع یکسان برای تعیین نوع محتوا
capabilitiesNSFileProviderItemCapabilitiesپرچم‌ها: حذف، تغییر نام، افزودن برچسب

این پروتکل همچنین از قابلیت‌های پیشرفته از طریق NSFileProviderItemProtocol پشتیبانی می‌کند: برچسب‌ها (برچسب‌های رنگی)، آیکون‌ها، نسخه‌بندی و اقدامات سفارشی. برای فایل‌های بزرگ، پشتیبانی از انتقال‌های قابل ادامه (resumable transfers) از طریق NSFileProviderService پیاده‌سازی می‌شود.

بر اساس WWDC 2023، اپل توصیه می‌کند از بسته‌ها (NSFileProviderItemFields) برای به‌روزرسانی فقط ویژگی‌های تغییر یافته استفاده کنید، نه کل شیء. این کار همگام‌سازی را در به‌روزرسانی‌های دسته‌ای به طور قابل توجهی سرعت می‌بخشد — برای مثال، وقتی فقط اندازه گروهی از فایل‌ها تغییر می‌کند.

موتور همگام‌سازی و NSFileProviderManager

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

swift
class SyncManager {
    let providerManager = NSFileProviderManager.default

    func signalUpdate(for item: NSFileProviderItemIdentifier) {
        providerManager.signalEnumerator(
            for: item.parentItemIdentifier
        ) { error in
            if let error = error {
                Logger.sync.error(
                    "Failed to signal: \(error.localizedDescription)"
                )
            }
        }
    }

    func uploadItem(at url: URL, itemId: NSFileProviderItemIdentifier) {
        providerManager.registerURLBasedItem(
            with: itemId,
            url: url
        )
    }
}

موتور همگام‌سازی — منطقی است که توسعه‌دهنده خودش پیاده‌سازی می‌کند. اپل مکانیزم همگام‌سازی داخلی ارائه نمی‌دهد — فقط API برای اطلاع‌رسانی به سیستم درباره تغییرات. ارائه‌دهنده خودش تصمیم می‌گیرد که چگونه فایل‌ها را از سرور دانلود کند، آن‌ها را به صورت محلی ذخیره نماید و تعارضات ویرایش را حل کند.

تعارضات: سیستم تشخیص تعارضات نسخه را از طریق NSFileProviderSyncAnchor پشتیبانی می‌کند. وقتی فایل به طور همزمان به صورت محلی و از راه دور تغییر می‌کند، ارائه‌دهنده از لنگر همگام‌سازی برای تعیین آخرین نسخه همگام‌سازی شده و حل تعارض با استراتژی «آخرین نویسنده برنده می‌شود» یا با ایجاد یک کپی تعارض استفاده می‌کند.

امنیت و محیط sandbox توسعه

File Provider Extension در داخل یک sandbox (محیط ایزوله) سختگیرانه iOS کار می‌کند. توسعه به سیستم فایل برنامه میزبان دسترسی مستقیم ندارد و برعکس — برنامه نمی‌تواند فایل‌های ارائه‌دهنده را مستقیماً بخواند. تمام تبادل داده از طریق APIهای سیستمی Files.app انجام می‌شود.

دسترسی به فایل‌های کاربر فقط از طریق تعامل صریح امکان‌پذیر است: کاربر فایل را از Files.app در یک برنامه باز می‌کند و سیستم یک کپی موقت از فایل در یک کانتینر ایزوله ایجاد می‌کند. برنامه دریافت‌کننده با این کپی کار می‌کند، نه با نسخه اصلی در ذخیره‌ساز ارائه‌دهنده.

بر اساس Apple Security Guide, 2024، ارائه‌دهنده موظف است رمزنگاری داده‌ها را در هنگام انتقال (TLS 1.3) پیاده‌سازی کند و می‌تواند به صورت اختیاری رمزنگاری روی دیسک برای فایل‌های ذخیره شده اضافه نماید. احراز هویت کاربر از طریق یک مؤلفه UI جداگانه FileProviderUI انجام می‌شود که برای ورود امن اطلاعات کاربری خارج از sandbox توسعه راه‌اندازی می‌شود.

محدودیت کلیدی: توسعه نمی‌تواند کد دلخواه اجرا کند — فقط درخواست‌ها را از طریق NSFileProviderManager پردازش می‌کند. هر منطقی که فراتر از عملیات فایل باشد باید در برنامه اصلی پیاده‌سازی و از طریق app groups یا XPC services فراخوانی شود.

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

File Provider Extension در iOS چیست؟

File Provider Extension یک توسعه برنامه برای ادغام ذخیره‌سازهای فایل خارجی با برنامه Files است. این امکان نمایش فایل‌ها از سرویس‌های ابری، FTP، NAS و سایر منابع را بدون کپی کردن محلی آن‌ها فراهم می‌کند.

تفاوت File Provider با Document Provider چیست؟

File Provider (iOS 11+) جایگزین Document Provider شد و همگام‌سازی پس‌زمینه، پشتیبانی از جستجو از طریق Spotlight، برچسب‌ها و عملکرد بهبود یافته را اضافه کرد. Document Provider از iOS 11 منسوخ شده و در iOS 14 حذف شد.

File Provider Extension چگونه فایل‌ها را همگام‌سازی می‌کند؟

همگام‌سازی توسط توسعه‌دهنده از طریق NSFileProviderManager پیاده‌سازی می‌شود. توسعه از طریق signalEnumerator به سیستم درباره تغییرات اطلاع می‌دهد و سیستم لیست به‌روز شده عناصر را درخواست می‌کند. تعارضات نسخه از طریق NSFileProviderSyncAnchor حل می‌شوند.

آیا توسعه می‌تواند بدون برنامه اصلی کار کند؟

بله، File Provider Extension می‌تواند به عنوان یک فرآیند مستقل بدون اجرای برنامه اصلی کار کند. این یک توسعه headless است که iOS آن را به درخواست Files.app راه‌اندازی می‌کند. با این حال، احراز هویت و پیکربندی اولیه معمولاً از طریق برنامه اصلی انجام می‌شود.

چه مجوزهای دسترسی برای File Provider Extension لازم است؟

توسعه به capability File Provider در Xcode و همچنین entitlement com.apple.developer.file-provider نیاز دارد. برای دسترسی به شبکه، capability Network اضافه می‌شود. سایر مجوزها به شدت توسط sandbox iOS محدود می‌شوند.

خلاصه

  • File Provider Extension — مکانیزم iOS برای ادغام سیستم‌های فایل خارجی با Files.app از طریق توسعه برنامه
  • NSFileProviderManager — API اصلی برای مدیریت فایل‌ها، اطلاع‌رسانی تغییرات و دانلودها
  • NSFileProviderItem — پروتکلی که واحد محتوا را در سلسله مراتب ارائه‌دهنده توصیف می‌کند
  • Sandbox توسعه را از برنامه میزبان ایزوله می‌کند — تبادل داده فقط از طریق Files.app
  • همگام‌سازی توسط توسعه‌دهنده پیاده‌سازی می‌شود: اپل API ارائه می‌دهد اما موتور داخلی ندارد
  • تعارضات نسخه از طریق لنگر همگام‌سازی مدیریت می‌شوند — ارائه‌دهنده استراتژی حل را انتخاب می‌کند
  • حالت پس‌زمینه به توسعه اجازه می‌دهد بدون برنامه اجرا شده کار کند، اما نیاز به ذخیره وضعیت دارد

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

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

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

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