iCloud Drive:什么是它,苹果云存储以及如何工作

作者: IT Sectr 发布日期: 2026-07-11 阅读时间: 6 分钟

iCloud Drive 是苹果的云文件存储,内置于 iOS、macOS 和 iPadOS 中,用于在用户设备之间同步文档。根据 Apple, 2024 的数据,iCloud Drive 使用 CloudKit 作为后端来存储文件和自动同步:在 iPhone 上所做的更改会立即反映在 Mac 和 iPad 上,无需用户操作。开发人员可以通过 NSDocumentPickerViewController 和 Ubiquity API 将 iCloud Drive 集成到应用程序中。

要点

  • iCloud Drive — 苹果云存储,用于设备间文件同步
  • CloudKit — iCloud 后端,提供数据存储和同步
  • Ubiquity container — 用于存储应用程序同步文件的特殊目录
  • NSDocumentPickerViewController — 用于导入和导出 iCloud 文件的系统控制器
  • 版本冲突 通过 NSFileVersion 自动解决,并创建冲突副本

什么是 iOS 中的 iCloud Drive?

iCloud Drive 是苹果的云文件服务,为使用同一 Apple ID 授权的用户所有设备提供统一的文档存储。该服务于 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 containers 访问存储。

iCloud Drive 和 Ubiquity 的架构

Ubiquity — 苹果术语,表示数据「无处不在」的能力(源自英文 ubiquitous)。在 iCloud Drive 的背景下,这是一种通过 CloudKit 云后端使文件在用户所有设备之间自动同步的机制。

组件描述角色
Ubiquity container应用程序的特殊目录存储要同步的文件
CloudKit苹果后端服务提供存储和同步
NSMetadataQuery系统查询跟踪 Ubiquity 文件的状态
NSFileVersion版本管理解决更改冲突

Ubiquity container 是应用程序沙盒内标记为同步的目录。放置在此目录中的文件会自动上传到 iCloud Drive 并分发到其他设备。对容器的访问通过 Xcode 中的 Capabilities 进行配置。

系统通过 NSMetadataQuery 跟踪每个文件的状态:文件可以是本地的(已下载到设备)、远程的(仅在云中)或正在下载。开发人员可以通过编程方式请求下载文件或在打开前检查其可用性。

将 iCloud Drive 集成到应用程序中

集成 iCloud Drive 从在 Xcode 中添加 iCloud capability 并启用 iCloud Documents 服务开始。之后,应用程序获得对 Ubiquity container 的访问权限——这是一个由 FileManager 返回路径的特殊目录。

swift
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 进行读取和写入。这保证了文件在操作期间不会被其他进程(例如同步)修改。忽略协调可能会导致数据损坏。

冲突解决和 NSFileVersion

版本冲突 发生在文件在同步完成之前同时在两个设备上被修改时。iOS 通过 NSFileVersion 自动检测此类情况,并创建冲突版本,用户或应用程序必须解决这些冲突。

swift
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)。苹果建议对于文本和结构化数据使用自动合并,对于二进制格式——向用户显示冲突版本。

存储限制和优化

免费存储 iCloud 为 5 GB,分配给用户的所有服务:备份、照片、邮件和 iCloud Drive。付费套餐从 50 GB 起,最高可达 12 TB。对于文件交换频繁的应用程序,考虑这些限制至关重要。

存储优化: iOS 提供了文件驱逐机制(eviction)——当本地空间不足时,系统可以删除 iCloud Drive 文件的缓存副本,只保留元数据。当尝试打开此类文件时,系统会自动从云中下载。开发人员可以通过 NSFileCoordinator 控制此过程,并通过 NSMetadataUbiquitousItemDownloadingStatusKey 检查文件状态。

根据 WWDC 2022,苹果建议以下优化 iCloud Drive 的实践:在 Ubiquity container 中仅存储用户文档,而不是应用程序缓存;使用带进度指示器的异步下载;在下载前向用户提供文件大小信息;为大文件实现断点续传支持。

关键细节: 从 Ubiquity container 中删除文件会导致其从用户所有设备中删除。对于临时文件,请使用本地 Documents 目录,而不是 Ubiquity container。同时请注意,同步并非即时——延迟可能从几秒到几分钟不等,具体取决于文件大小和网络。

常见问题

什么是 iCloud Drive?

iCloud Drive 是苹果的云文件存储,可在 iPhone、iPad、Mac 和 PC 之间同步文档。它与 Finder 和“文件”应用程序集成,无需额外应用程序即可处理文档。

iCloud Drive 如何同步文件?

同步 通过 CloudKit 工作:来自应用程序 Ubiquity container 的文件会自动上传到云端并分发到用户的其他设备。系统使用 NSMetadataQuery 跟踪状态,使用 NSFileCoordinator 进行安全访问。

如何将 iCloud Drive 集成到应用程序中?

在 Xcode 中添加 iCloud capability,启用 iCloud Documents 服务,并使用 FileManager.url(forUbiquityContainer:) 获取同步目录的路径。使用 NSDocumentPickerViewController 选择文件。

iCloud Drive 中出现版本冲突怎么办?

iOS 通过 NSFileVersion 创建 冲突版本。开发人员可以自动合并更改或向用户显示选择。系统将版本保存最多 30 天,并在不同设备同时更改时自动标记冲突。

iCloud Drive 有哪些限制?

免费 提供 5 GB 用于所有 iCloud 服务。付费套餐:50 GB、200 GB、2 TB、6 TB 和 12 TB。对于大文件,实现断点续传支持,并在写入前检查可用空间。

总结

  • iCloud Drive — 苹果云存储,通过 CloudKit 在设备间自动同步
  • Ubiquity container — 用于存储同步文件的应用程序特殊目录
  • NSMetadataQuery 跟踪 iCloud Drive 文件的下载状态和可用性
  • NSFileCoordinator 对于安全读取和写入同步文件是必需的
  • 版本冲突 会被自动检测并需要通过 NSFileVersion 解决
  • 优化 包括驱逐未使用的文件和带进度的异步下载
  • 免费限制 5 GB — 更大容量需要付费 iCloud+ 套餐

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读