ios - 使用 Xcode 13 (iOS 15 SDK) 构建不再向后兼容 iOS 14.x 目标
问题描述
刚刚发现使用 CloudKit 时,使用新的 iOS 15 SDK (Xcode 13 RC) 构建应用程序不再向后兼容 iOS 14.x 目标。
重现步骤:
Xcode 13 RC 中的新项目(检查 Core Data + CloudKit 选项)
将 iOS 部署目标设置为 14.0
修改生成的 Persistence.swift 文件并添加一个私有 CK 存储,如下所示:
让 cloudStoreDescription = NSPersistentStoreDescription(url: url.appendingPathComponent("(privateCloudStoreName).sqlite")) cloudStoreDescription.configuration = "privateCkStoreName" var privateCloudKitContainerOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: "CKIDENTIFIFER") privateCloudKitContainerOptions.databaseScope = .private cloudStoreDescription.cloudKitContainerOptions = privateCloudKitContainerOptions
在装有 iOS 15 的 iPhone 上运行 -> 可以使用
下载更多模拟器运行时并添加 iOS 14.5
在装有 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
解决方案
解决方案一直在我眼前:
只需删除以下行:
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
推荐阅读
- c# - 数据表中的复数
- function - 理解 Rust 的函数返回类型
- android - 为什么在 Android 中使用后退按钮(物理后退按钮)后无法更改工具栏标题?
- javascript - 在 React-Native formik onBlur() 函数中调用 prop 和函数
- pyomo - 更改索引参数值的最佳方法
- regex - 使用 RegEx 匹配表达式的逆
- oracle - 在oracle中将字母数字字符串转换为数字字符串的函数
- database - 具有唯一值的第三范式
- java - Spring AOP 获取修改后的参数值
- c++ - 这是用“std::string_view”或“std::string”替换“const std::string &”的好习惯吗?