为 iCloud 创建 iCloud 容器
一个。登录 developer.apple.com
湾。转到标识符并添加 iCloud 容器。
C。iCloud 容器一旦创建就无法删除。
创建包含 iCloud 功能的 App ID
一个。创建应用 ID
湾。添加具有显式 Bundle ID 的 iCloud 支持。
C。创建 Provisioning Profile 并将其下载到 Xcode。
在 Xcode 中配置功能
一个。单击并从“+ Capability”添加 iCloud 支持
湾。对于 iCloud 文档存储,选择 iCloud Documents 并选择您创建的容器。
C。在 Info.plist 中添加 NSUbiquitousContainers 键
d。里面的“MyApp”将显示为文件夹名称。
<key>NSUbiquitousContainers</key>
<dict>
<key>iCloud.com.example.MyApp</key>
<dict>
<key>NSUbiquitousContainerIsDocumentScopePublic</key>
<true/>
<key>NSUbiquitousContainerSupportedFolderLevels</key>
<string>Any</string>
<key>NSUbiquitousContainerName</key>
<string>MyApp</string>
</dict>
</dict>
测试代码片段
一个。试试下面的快速和肮脏的测试。
let driveURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")
if let unwrappedFU = driveURL {
print("iCloud available")
let fileURL = driveURL!.appendingPathComponent("test.txt")
try? "Hello word".data(using: .utf8)?.write(to: fileURL)
} else {
print("iCloud not available")
}
写入您的 App 文档文件夹不同于 iCloud 文档存储。您可以使您的 App Document 文件夹可见。通过添加到 Info.plist 2 附加属性。
一个。添加支持打开文件到位:是
湾。支持就地打开文件:是
C。使用 Tim 的代码片段进行测试。https://www.youtube.com/watch?v=p1UNnsodJxc
let file = "\(UUID().uuidString).txt"
let contents = "Some text..."
let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = dir.appendingPathComponent(file)
do {
try contents.write(to: fileURL, atomically: false, encoding: .utf8)
}
catch {
print("Error: \(error)")
}
注意:您会注意到“在我的 iPhone”文件夹中的文件应用程序中的应用程序文件夹。那是您向用户公开的 App 的 Document 文件夹。您还会注意到 iCloud Drive 文件夹中的应用程序文件夹。这两个文件夹是不同的。您应该使用您的 App 文件夹并使用 iCloud Drive 文件夹作为您的导出目的地,这样您就不必过多地处理访问控制。
警告:奇怪的是,这一切都没有奏效,包括在 iPhone 上退出 iCloud。即使它在模拟器上工作。在我的情况下,它仅在 iPhone 重新启动时才开始工作。