File Provider Extension: co to jest, rozszerzenie dostępu do plików iOS

Autor: IT Sectr Opublikowano: 2026-07-11 Czas czytania: 6 min

File Provider Extension to mechanizm iOS, który pozwala aplikacjom udostępniać pliki z zewnętrznych źródeł za pomocą wbudowanej aplikacji Pliki. Według Apple Developer Documentation, 2024, File Provider Extension umożliwia wyświetlanie plików z chmur, serwerów i niestandardowych systemów plików bezpośrednio w Files.app — bez konieczności ich lokalnego importowania. Użytkownik otrzymuje jeden interfejs do pracy z plikami niezależnie od ich fizycznej lokalizacji.

Najważniejsze

  • File Provider Extension — rozszerzenie iOS do integracji zewnętrznych systemów plików z Files.app
  • NSFileProviderManager — główne API do zarządzania plikami i synchronizacji stanu
  • Dwa tryby pracy: Foundation-based i FileProviderUI dla różnych scenariuszy integracji
  • Dostawcy mogą zaimplementować wyszukiwanie, hierarchię folderów i tagi przez NSFileProviderItem
  • Bezpieczeństwo jest zapewnione przez Sandbox — rozszerzenie działa w izolacji od aplikacji

Co to jest File Provider Extension w iOS?

File Provider Extension to rozszerzenie aplikacji w iOS i macOS, które pozwala aplikacji udostępniać pliki z zewnętrznych źródeł za pośrednictwem systemowej aplikacji Pliki. Pojawiło się w iOS 11 i zastąpiło mechanizm Document Provider, dodając obsługę synchronizacji, wyszukiwania i tagów.

Głównym zadaniem File Provider Extension jest działanie jako most między zewnętrznym magazynem (serwerem chmurowym, korporacyjnym NAS, FTP) a Files.app. Użytkownik widzi pliki i foldery tak, jakby były przechowywane lokalnie, chociaż w rzeczywistości dane mogą znajdować się na zdalnym serwerze. Rozszerzenie działa w tle, synchronizując zawartość w miarę potrzeb.

Według WWDC 2024, Apple aktywnie rozwija FileProvider API: dodano obsługę synchronizacji przyrostowej, poprawiono wydajność dla dużych katalogów i dodano możliwość operacji grupowych. To sprawia, że File Provider Extension jest preferowanym sposobem integracji zewnętrznych plików w ekosystemie Apple.

Jak działa File Provider Extension

Architektura File Provider Extension składa się z dwóch komponentów: głównego rozszerzenia (typ dostawcy plików) i opcjonalnego rozszerzenia UI do uwierzytelniania i konfiguracji. Główne rozszerzenie implementuje protokół NSFileProviderExtension i obsługuje wszystkie żądania z 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)
    }
}

Gdy użytkownik otwiera Files.app i wybiera twojego dostawcę, system uruchamia rozszerzenie w procesie tła. Rozszerzenie nie ma interfejsu użytkownika — to proces headless, który obsługuje żądania odczytu, zapisu, zmiany nazwy i usuwania plików. Wszystkie operacje są wykonywane asynchronicznie przez NSFileProviderManager.

Ważna uwaga: File Provider Extension działa w oddzielnym procesie i może zostać zakończone przez system przy braku pamięci. Dlatego dostawca musi umieć przywracać stan po restarcie, zapisując identyfikatory i pamięć podręczną synchronizacji w stałym magazynie.

Model NSFileProviderItem: pliki i foldery

NSFileProviderItem to protokół opisujący pojedynczy plik lub folder w hierarchii dostawcy. Każdy element ma unikalny identyfikator, nazwę, typ (plik lub folder), daty utworzenia i modyfikacji, rozmiar oraz flagi (dostępny offline, tylko do odczytu).

WłaściwośćTypOpis
itemIdentifierNSFileProviderItemIdentifierUnikalny ID elementu w systemie dostawcy
parentItemIdentifierNSFileProviderItemIdentifierID folderu nadrzędnego (root — .rootContainer)
filenameStringNazwa pliku z rozszerzeniem
typeIdentifierString (UTType)Uniform Type Identifier do określenia typu zawartości
capabilitiesNSFileProviderItemCapabilitiesFlagi: usuwanie, zmiana nazwy, dodawanie tagów

Protokół obsługuje również zaawansowane możliwości przez NSFileProviderItemProtocol: tagi (kolorowe etykiety), ikony, wersjonowanie i niestandardowe akcje. Dla dużych plików implementowana jest obsługa wznawiania transferów (resumable transfers) przez NSFileProviderService.

Według WWDC 2023, Apple zaleca używanie zamknięć (NSFileProviderItemFields) do aktualizacji tylko zmienionych właściwości, a nie całego obiektu. To znacznie przyspiesza synchronizację przy aktualizacjach zbiorczych — na przykład gdy zmienia się tylko rozmiar grupy plików.

Silnik synchronizacji i NSFileProviderManager

NSFileProviderManager — centralna klasa do zarządzania cyklem życia rozszerzenia. Zapewnia metody do sygnalizowania systemowi zmian, obsługi konfliktów współpracy i zarządzania pobieraniem. Menedżer automatycznie śledzi aktywne transfery i priorytetyzuje pliki widoczne dla użytkownika.

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
        )
    }
}

Silnik synchronizacji to logika, którą programista implementuje samodzielnie. Apple nie zapewnia wbudowanego mechanizmu synchronizacji — tylko API do powiadamiania systemu o zmianach. Dostawca sam decyduje, jak pobierać pliki z serwera, buforować je lokalnie i rozwiązywać konflikty edycji.

Konflikty: system obsługuje wykrywanie konfliktów wersji przez NSFileProviderSyncAnchor. Gdy plik jest zmieniany jednocześnie lokalnie i zdalnie, dostawca używa kotwicy synchronizacji do określenia ostatniej zsynchronizowanej wersji i rozwiązania konfliktu według strategii „ostatni zapis wygrywa” lub przez utworzenie kopii konfliktowej.

Bezpieczeństwo i piaskownica rozszerzenia

File Provider Extension działa w ścisłej piaskownicy (sandbox) iOS. Rozszerzenie nie ma bezpośredniego dostępu do systemu plików aplikacji-host i odwrotnie — aplikacja nie może bezpośrednio odczytywać plików dostawcy. Cała wymiana danych odbywa się przez systemowe API Files.app.

Dostęp do plików użytkownika jest możliwy tylko przez jawną interakcję: użytkownik otwiera plik z Files.app w aplikacji, a system tworzy tymczasową kopię pliku w izolowanym kontenerze. Aplikacja-odbiorca pracuje z tą kopią, a nie z oryginałem w magazynie dostawcy.

Według Apple Security Guide, 2024, dostawca musi zaimplementować szyfrowanie danych podczas transmisji (TLS 1.3) i może opcjonalnie dodać szyfrowanie dysku dla buforowanych plików. Uwierzytelnianie użytkownika odbywa się przez oddzielny komponent UI FileProviderUI, który jest uruchamiany poza piaskownicą rozszerzenia w celu bezpiecznego wprowadzania danych uwierzytelniających.

Kluczowe ograniczenie: rozszerzenie nie może uruchamiać dowolnego kodu — obsługuje tylko żądania przez NSFileProviderManager. Każda logika wykraczająca poza operacje na plikach musi być zaimplementowana w głównej aplikacji i wywoływana przez app groups lub XPC services.

Często zadawane pytania

Co to jest File Provider Extension w iOS?

File Provider Extension to rozszerzenie aplikacji do integracji zewnętrznych magazynów plików z aplikacją Pliki. Umożliwia wyświetlanie plików z usług chmurowych, FTP, NAS i innych źródeł bez ich lokalnego kopiowania.

Czym File Provider różni się od Document Provider?

File Provider (iOS 11+) zastąpił Document Provider, dodając synchronizację w tle, obsługę wyszukiwania przez Spotlight, tagi i lepszą wydajność. Document Provider był uznawany za przestarzały od iOS 11 i usunięty w iOS 14.

Jak File Provider Extension synchronizuje pliki?

Synchronizacja jest implementowana przez programistę za pomocą NSFileProviderManager. Rozszerzenie sygnalizuje systemowi zmiany przez signalEnumerator, a system żąda zaktualizowanej listy elementów. Konflikty wersji są rozwiązywane przez NSFileProviderSyncAnchor.

Czy rozszerzenie może działać bez głównej aplikacji?

Tak, File Provider Extension może działać jako samodzielny proces bez uruchomionej głównej aplikacji. To rozszerzenie headless, które iOS uruchamia na żądanie Files.app. Jednak uwierzytelnianie i wstępna konfiguracja zwykle są wykonywane przez główną aplikację.

Jakie uprawnienia są potrzebne dla File Provider Extension?

Rozszerzenie wymaga capability File Provider w Xcode oraz entitlements com.apple.developer.file-provider. Do dostępu do sieci dodaje się capability Network. Wszystkie inne uprawnienia są ściśle ograniczone przez piaskownicę iOS.

Podsumowanie

  • File Provider Extension — mechanizm iOS do integracji zewnętrznych systemów plików z Files.app przez rozszerzenie aplikacji
  • NSFileProviderManager — główne API do zarządzania plikami, sygnalizowania zmian i pobierania
  • NSFileProviderItem — protokół opisujący jednostkę zawartości w hierarchii dostawcy
  • Piaskownica izoluje rozszerzenie od aplikacji-host — wymiana danych tylko przez Files.app
  • Synchronizacja jest implementowana przez programistę: Apple dostarcza API, ale nie wbudowany silnik
  • Konflikty wersji są obsługiwane przez kotwicę synchronizacji — dostawca wybiera strategię rozwiązywania
  • Tryb tła pozwala rozszerzeniu działać bez uruchomionej aplikacji, ale wymaga zapisywania stanu

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również