使用 iCloud Drive 存储文件

发布
更新
字数 475
阅读 3 分钟
阅读量 1762

iCloud 是 iOS 生态中很重要的一部分,从开放至今已经发展的非常完善。针对不同场景分为三部分:

  1. Key-value storage 通常可用于存储、同步应用的配置信息
  2. iCloud Documents 即 iCloud Drive。如其名,用于存储文件内容,如文本、图片、音频、视频等,在 iOS 中可用使用内置「文件」应用直接访问,在 macOS 中也可以直接在 Finder 中访问
  3. CloudKit 用于结构化数据存储,如可同步的 Core Data

本文主要介绍 iCloud Drive 存储文件。

开启 iCloud 及 iCloud Documents 服务

在 Xcode 中:

  1. 选中 target
  2. 打开 Signing & Capabilities 选项卡
  3. 点击左上角+ Capability ,找到 iCloud,添加,选中 iCloud Documents service

编辑 info.plist 文件

为了让 iCloud drive 知道我们要把文件存储在哪个路径下,我们需要进行一些简单的配置:右键项目的 Info 文件,Open As > Source Code,然后加入一项新的配置:

<key>NSUbiquitousContainers</key>
<dict>
    <key>YOUR_ICLOUD_CONTAINER_NAME</key>
    <dict>
        <key>NSUbiquitousContainerIsDocumentScopePublic</key>
        <true/>
        <key>NSUbiquitousContainerSupportedFolderLevels</key>
        <string>Any</string>
        <key>NSUbiquitousContainerName</key>
        <string>FOLDER_NAME</string>
    </dict>
</dict>

注意修改 YOUR_ICLOUD_CONTAINER_NAMEiCloud.开头的)和 FOLDER_NAME(通常使用应用名)

使用 iCloud Drive

要在 iCloud Drive 中读写文件,首先使用 FileManager 实例方法 func url(forUbiquityContainerIdentifier containerIdentifier: String?) -> URL? 获取应用的 iCloud Drive 根目录,文档:https://developer.apple.com/documentation/foundation/filemanager/1411653-url

该方法同样用于判断 iCloud Drive 是否可用,另注意不要在主线程调用,否则可能阻塞 UI 进程。

为了使我们的文件在文件系统中可见,需要使用 Documents 路径:

let documentsPath = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents", conformingTo: .directory)

至少写入一个文件后就可以在 iOS 内置的「文件」应用中查看了:

let filePath = documentsPath.appendingPathComponent("hello.txt", conformingTo: .text)
try? "Hello iCloud Drive".data(using: .utf8)?.write(to: filePath)

了解更多关于 iCloud Drive 文件读写的内容