iCloud Drive는 사용자 기기 간에 문서를 동기화하기 위해 iOS, macOS 및 iPadOS에 내장된 Apple의 클라우드 파일 스토리지입니다. Apple, 2024에 따르면, iCloud Drive는 파일 저장 및 자동 동기화를 위해 CloudKit을 백엔드로 사용합니다. iPhone에서 변경한 내용은 사용자의 작업 없이 Mac 및 iPad에 즉시 반영됩니다. 개발자는 NSDocumentPickerViewController 및 Ubiquity API를 통해 iCloud Drive를 애플리케이션에 통합할 수 있습니다.
핵심 사항
iCloud Drive는 동일한 Apple ID로 인증된 모든 사용자 기기에 통합 문서 스토리지를 제공하는 Apple의 클라우드 파일 서비스입니다. 이 서비스는 2014년 iOS 8 및 OS X Yosemite와 함께 iCloud Documents를 대체하여 출시되었습니다.
iCloud Drive는 운영 체제와의 깊은 통합에서 다른 클라우드 스토리지 서비스(Google Drive, Dropbox)와 다릅니다. 파일은 추가 앱을 설치할 필요 없이 macOS의 Finder 및 iOS의 파일 앱에 직접 나타납니다. 시스템은 Wi-Fi와 셀룰러 네트워크를 전환하면서 백그라운드에서 자동으로 콘텐츠를 동기화합니다.
Apple Platform Overview, 2024에 따르면, iCloud Drive는 최대 30일의 파일 버전 관리, iCloud Sharing을 통한 폴더 공유 및 Spotlight 시스템 검색과의 통합을 지원합니다. 개발자는 NSFileCoordinator API 및 Ubiquity 컨테이너를 통해 스토리지에 액세스합니다.
Ubiquity는 데이터가 “어디에나 존재”할 수 있는 능력을 의미하는 Apple 용어입니다. iCloud Drive의 맥락에서 이는 CloudKit 클라우드 백엔드를 통해 사용자의 모든 기기에서 파일이 자동으로 동기화될 수 있도록 하는 메커니즘입니다.
| 구성 요소 | 설명 | 역할 |
|---|---|---|
| Ubiquity 컨테이너 | 애플리케이션 특수 디렉터리 | 동기화할 파일 저장 |
| CloudKit | Apple 백엔드 서비스 | 스토리지 및 동기화 제공 |
| NSMetadataQuery | 시스템 쿼리 | Ubiquity 파일 상태 추적 |
| NSFileVersion | 버전 관리 | 변경 충돌 해결 |
Ubiquity 컨테이너는 동기화를 위해 표시된 애플리케이션 샌드박스 내의 디렉터리입니다. 이 디렉터리에 배치된 파일은 자동으로 iCloud Drive에 업로드되어 다른 기기에 배포됩니다. 컨테이너에 대한 액세스는 Xcode의 Capabilities를 통해 구성됩니다.
시스템은 NSMetadataQuery를 통해 각 파일의 상태를 추적합니다. 파일은 로컬(기기에 다운로드됨), 원격(클라우드에만 있음) 또는 다운로드 중일 수 있습니다. 개발자는 프로그래밍 방식으로 파일 다운로드를 요청하거나 열기 전에 가용성을 확인할 수 있습니다.
iCloud Drive 통합은 Xcode에서 iCloud 기능을 추가하고 iCloud Documents 서비스를 활성화하는 것으로 시작됩니다. 그런 다음 애플리케이션은 FileManager를 통해 경로가 반환되는 특수 디렉터리인 Ubiquity 컨테이너에 액세스할 수 있습니다.
import UIKit
class DocumentManager {
func ubiquityURL() -> URL? {
return FileManager.default
.url(forUbiquityContainer: nil)
}
func saveToICloud(data: Data, filename: String) {
guard let containerURL = ubiquityURL() else { return }
let fileURL = containerURL
.appendingPathComponent(filename)
do {
try data.write(to: fileURL)
Logger.storage.info(
"Saved \(filename) to iCloud Drive"
)
} catch {
Logger.storage.error(
"Save failed: \(error.localizedDescription)"
)
}
}
func listICloudFiles() {
let query = NSMetadataQuery()
query.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]
query.start()
}
}
NSDocumentPickerViewController는 iCloud Drive에서 파일을 선택하고 가져오기 위한 시스템 UI를 제공합니다. 사용자는 검색, 정렬 및 다중 선택을 지원하는 표준 파일 브라우저를 봅니다. 파일 선택 후 애플리케이션은 URL을 받고 NSFileCoordinator를 통해 작업할 수 있습니다.
중요 규칙: iCloud Drive 파일로 작업할 때는 읽기와 쓰기에 NSFileCoordinator를 사용해야 합니다. 이렇게 하면 작업 중에 파일이 다른 프로세스(예: 동기화)에 의해 수정되지 않습니다. 조정을 소홀히 하면 데이터가 손상될 수 있습니다.
버전 충돌은 동기화가 완료되기 전에 두 기기에서 파일이 동시에 수정될 때 발생합니다. iOS는 NSFileVersion을 통해 이러한 상황을 자동으로 감지하고 사용자 또는 애플리케이션이 해결해야 하는 충돌 버전을 만듭니다.
func resolveConflicts(for fileURL: URL) {
let conflictVersions = NSFileVersion
.unresolvedConflictVersionsOfItem(at: fileURL) ?? []
for version in conflictVersions {
do {
let conflictData = try Data(contentsOf: version.url)
let resolved = mergeData(
original: try Data(contentsOf: fileURL),
conflict: conflictData
)
try resolved.write(to: fileURL)
version.remove()
} catch {
Logger.sync.error(
"Conflict resolution failed: \(error)"
)
}
}
}
NSFileVersion은 최대 30일 동안 파일 변경 내역을 저장합니다. 각 버전에는 URL, 생성 날짜 및 버전을 만든 기기의 식별자가 포함됩니다. 두 기기가 동일한 기본 식별자로 변경 사항을 보내면 시스템이 자동으로 버전을 충돌로 표시합니다.
해결 전략: 애플리케이션이 자동으로 변경 사항을 병합하거나(지원되는 형식의 경우) 사용자에게 버전 선택을 표시하거나 마지막 작성자 우선(last-writer-wins) 전략을 사용할 수 있습니다. Apple은 텍스트 및 구조화된 데이터에는 자동 병합을, 바이너리 형식에는 충돌 버전을 사용자에게 표시할 것을 권장합니다.
iCloud의 무료 스토리지는 5GB이며 백업, 사진, 메일 및 iCloud Drive의 모든 사용자 서비스에 분산됩니다. 유료 요금제는 50GB부터 시작하여 최대 12TB까지 있습니다. 파일 교환이 많은 애플리케이션의 경우 이러한 제한을 고려하는 것이 중요합니다.
스토리지 최적화: iOS는 파일 제거 메커니즘을 제공합니다. 로컬 공간이 부족하면 시스템이 iCloud Drive 파일의 캐시된 복사본을 제거하고 메타데이터만 남길 수 있습니다. 이러한 파일을 열려고 하면 시스템이 자동으로 클라우드에서 다운로드합니다. 개발자는 NSFileCoordinator를 통해 이 프로세스를 제어하고 NSMetadataUbiquitousItemDownloadingStatusKey를 통해 파일 상태를 확인할 수 있습니다.
WWDC 2022에 따르면 Apple은 iCloud Drive 최적화를 위해 다음 방법을 권장합니다. Ubiquity 컨테이너에는 앱 캐시가 아닌 사용자 문서만 저장합니다. 진행률 표시와 함께 비동기 다운로드를 사용합니다. 다운로드 전에 사용자에게 파일 크기 정보를 제공합니다. 대용량 파일의 재개 지원을 구현합니다.
핵심 사항: Ubiquity 컨테이너에서 파일을 삭제하면 사용자의 모든 기기에서 파일이 제거됩니다. 임시 파일의 경우 Ubiquity 컨테이너 대신 로컬 Documents 디렉터리를 사용하세요. 또한 동기화는 즉시 이루어지지 않으며 파일 크기와 네트워크에 따라 몇 초에서 몇 분까지 지연될 수 있습니다.
자주 묻는 질문
iCloud Drive는 iPhone, iPad, Mac 및 PC 간에 문서를 동기화하는 Apple의 클라우드 파일 스토리지입니다. Finder 및 파일 앱에 통합되어 추가 앱 없이 문서 작업을 할 수 있습니다.
동기화는 CloudKit을 통해 작동합니다. 애플리케이션의 Ubiquity 컨테이너에서 파일이 자동으로 클라우드에 업로드되고 사용자의 다른 기기에 배포됩니다. 시스템은 상태 추적에 NSMetadataQuery를, 안전한 액세스에 NSFileCoordinator를 사용합니다.
Xcode에서 iCloud 기능을 추가하고 iCloud Documents 서비스를 활성화한 다음 FileManager.url(forUbiquityContainer:)을 사용하여 동기화된 디렉터리의 경로를 가져옵니다. 파일 선택에는 NSDocumentPickerViewController를 사용합니다.
iOS는 NSFileVersion을 통해 충돌 버전을 만듭니다. 개발자는 변경 사항을 자동으로 병합하거나 사용자에게 선택권을 표시할 수 있습니다. 시스템은 최대 30일 동안 버전을 저장하고 다른 기기에서 동시에 변경이 발생하면 자동으로 충돌을 표시합니다.
무료 스토리지는 모든 iCloud 서비스에서 5GB입니다. 유료 요금제: 50GB, 200GB, 2TB, 6TB 및 12TB. 대용량 파일의 경우 재개 지원을 구현하고 쓰기 전에 사용 가능한 공간을 확인하세요.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.