首页 > 解决方案 > 使用 Xcode 13 (iOS 15 SDK) 构建不再向后兼容 iOS 14.x 目标

问题描述

刚刚发现使用 CloudKit 时,使用新的 iOS 15 SDK (Xcode 13 RC) 构建应用程序不再向后兼容 iOS 14.x 目标。

重现步骤:

  1. Xcode 13 RC 中的新项目(检查 Core Data + CloudKit 选项)

  2. 将 iOS 部署目标设置为 14.0

  3. 修改生成的 Persistence.swift 文件并添加一个私有 CK 存储,如下所示:

    让 cloudStoreDescription = NSPersistentStoreDescription(url: url.appendingPathComponent("(privateCloudStoreName).sqlite")) cloudStoreDescription.configuration = "privateCkStoreName" var privateCloudKitContainerOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: "CKIDENTIFIFER") privateCloudKitContainerOptions.databaseScope = .private cloudStoreDescription.cloudKitContainerOptions = privateCloudKitContainerOptions

  4. 在装有 iOS 15 的 iPhone 上运行 -> 可以使用

  5. 下载更多模拟器运行时并添加 iOS 14.5

  6. 在装有 iOS 14.5 的 iPhone 上运行 -> 将失败,并显示:

dyld:库未加载:/System/Library/Frameworks/_CoreData_CloudKit.framework/_CoreData_CloudKit 引用自:/Users/andrei/Library/Developer/CoreSimulator/Devices/8554B734-4894-4DD0-A8FA-6C20983F3A49/data/Containers/Bundle/ Application/1317D63A-F14B-4EA2-8F18-8EA623D358AB/testapp.app/testapp 原因:找不到图像

由于下周 iOS 15 将向公众发布,我该如何缓解这种情况?

可重现的例子在这里。反馈小助手id:FB9630276

标签: iosxcodecore-datacloudkitios15

解决方案


解决方案一直在我眼前:

只需删除以下行:

privateCloudKitContainerOptions.databaseScope = .private 

删除该行将具有与默认私有范围相同的效果,并且还将消除导入 CloudKit 的需要。

通过这样做,iOS 14.x 上不再有崩溃

如果你想使用 .public 范围,根据 Apple Frameworks Enginner,修复如下:

let options = NSPersistentCloudKitContainerOptions(containerIdentifier: id)
options.setValue(1, forKey: "databaseScope") // .public == 1 // options.databaseScope = CKDatabase.Scope.public
description.cloudKitContainerOptions = options

推荐阅读