File Provider Extension은 클라우드 서비스와 앱이 시스템 Files 앱에 파일을 표시할 수 있도록 하는 iOS 메커니즘입니다. 사용자는 외부 문서를 로컬 문서와 함께 통합된 인터페이스에서 보고 추가 소프트웨어를 설치하지 않고도 열기, 이동 및 편집할 수 있습니다. Apple Developer Documentation(2025)에 따르면 NSFileProviderManager는 증분 동기화를 제공하고 장치 자체 캐시를 통해 파일 버전을 관리합니다.
핵심 요점
File Provider Extension은 Files 앱에 새로운 문서 소스를 추가하는 앱 확장 프로그램입니다. 클라우드 서비스(Google Drive, Dropbox, OneDrive 또는 기업 스토리지)는 별도의 앱을 열지 않고도 시스템 인터페이스에 직접 파일 구조를 표시할 수 있습니다.
사용자는 원격 파일을 장치에 저장된 파일과 동일하게 작업합니다: 폴더 내용 탐색, 문서 끌어서 놓기, 호환 가능한 앱에서 열기, 변경 사항을 클라우드에 저장.WWDC 2025에 따르면 File Provider Extension은 최대 1000개의 동시 동기화 작업을 지원하고 동적 우선순위 관리를 통해 네트워크 속도에 적응합니다.
확장 프로그램은 백그라운드에서 실행됩니다 — iOS는 동기화가 필요할 때 실행하고 리소스가 부족하면 강제로 종료할 수 있습니다. 모든 작업은 멱등성을 가지며 체크포인트에서 재개를 지원해야 합니다.
File Provider Extension은 3계층 아키텍처를 가지고 있습니다: 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을 만들려면 Xcode에서 File Provider Extension 템플릿으로 새 타겟을 추가하는 것으로 시작합니다. Xcode는 자동으로 NSFileProviderExtension을 상속하는 클래스와 항목 작업을 위한 최소한의 메서드 세트를 생성합니다.
파일 구조의 각 항목(파일 또는 폴더)은 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:) 메서드는 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)")
}
}
자주 묻는 질문
모든 서비스가 자체 확장 프로그램을 구현할 수 있습니다. 지원하는 서비스로는 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는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.