blu*_*Fox 14 core-data ios imessage cloudkit swiftui
今年夏天,Apple 发布了一个信息丰富的示例应用程序,介绍如何使用 SwiftUI 中的 Core Data、CloudKit 和 UICloudSharingController 在 iCloud 用户之间共享对象。
\n但是,当用于带有 CloudKit 的 Core Data 时,使用 UICloudSharingController 添加更多参与者似乎不起作用。
\nMRE:
\n请参阅上面链接的 Apple 示例应用程序。\n使用其他示例应用程序时也会出现同样的问题,例如来自 RayW 的示例应用程序。\n该问题不会出现在使用纯 CloudKit 的示例中,例如Apple 的这个示例应用程序。
再生产:
\n期望:
\n我们可以使用 UICloudSharingController 通过消息、邮件或其他平台添加新参与者。该链接将在所有设备上正确显示。
现实:
\n在 iOS16+ 上,尝试通过消息共享会使用“协作”框架并导致警告:“发生错误。无法开始协作”(参见图 1)。出现控制台警告(见下文)。触发此错误会中断任何进一步的共享 - 现在也无法为 Mail 和其他平台创建链接(参见图 2)。此外,如果第一次尝试成功,则该链接不会在接收设备上正确显示(参见图 3)。
经过进一步测试,UICloudSharingController 在 iOS15 中也失败了 - 它只是关闭工作表,而不是在紧凑型设备上发出警报。显示现有共享时,UICloudSharingController 肯定会出现问题。
\n控制台日志:
\n当此问题第一次发生时,会出现以下控制台消息:
其中“containerID”是 CKContainer ID,例如 \xe2\x80\x9ciCloud.com.company.samples.CoreDataCloudKitShare\xe2\x80\x9d。随后尝试添加更多人员时不会出现该消息。
\n问题:
\n如何解决这个问题,以便我们可以使用 CloudKit 和 UICloudSharingController 在用户之间共享核心数据记录?
编辑:
\nshareObject(_:to:completionHandler:): Failed to share an object: Error Domain=NSCocoaErrorDomain Code=134060 "A Core Data error occurred." UserInfo={NSLocalizedFailureReason=NSPersistentCloudKitContainer does not support sharing objects across persistent stores. Objects must first be assigned to the correct persistent store (private, or shared as the case may be), so that they can be moved in to the correct record zone for sharing.})截至 2023 年 4 月 27 日和 iOS 16.4,帖子中描述的问题已由 Apple 解决。
在我的 TSI 中与 Apple 反复讨论后,我成功构建了一个具有 Core Data 和 CloudKit 共享功能的应用程序。
Apple 方面更新了示例应用程序,以反映所讨论的问题以及对 UICloudSharingController 所做的更新。使用相同的链接进行检查。
我想说的是,苹果工程师在解决这个问题上非常有帮助,并为我提供了很多技巧。我很感谢他们的帮助。
对于其他人:您可能很难将对象添加到其他用户的 CKShare(即共享持久存储中)。苹果对此的回应让我走上了正轨:
“现在支持用例的方法是将照片与已经绑定到共享的对象(例如共享标签)相关联。这样,Core Data 在保存照片时会将照片分配到正确的记录区域,就像当您从参与者一侧向共享照片添加新标签时所做的那样。引入相册之类的东西可能是合理的,以便用户可以将照片绑定到共享相册。”
另外,如果您计划在共享之间显示相同的对象(例如,可能会显示在多个相册中的单个照片),请不要忘记无法跨共享记录区域建立关系。因此,您不能拥有与多个相册有关系的单张照片。
| 归档时间: |
|
| 查看次数: |
1462 次 |
| 最近记录: |