问题标签 [cloudkit-sharing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
172 浏览

ios - CKFetchRecordZoneChangesOperation 未在共享记录删除时调用 recordWithIDWasDeletedBlock

我有一条从设备 A 共享到设备 B 的记录。设备 B 接受共享并在设备 B 的 UI 上显示信息。设备 B 使用 CKDatabaseSubscription 订阅该共享记录上的数据库更改。

然后我删除设备 A 上的该记录,然后触发设备 B 关于数据库更改的通知。然后,我通过使用 CKFetchDatabaseChangesOperation 获取数据库更改来处理设备 B 上的通知。然后我随后使用 CKFetchRecordZoneChangesOperation 获取区域更改。

我接到了 recordZoneFetchCompletionBlock 和 fetchRecordZoneChangesCompletionBlock 的电话,但就是这样。既没有调用 recordChangedBlock 也没有调用 recordWithIDWasDeletedBlock。

重要的是要注意我正在使用这个完全相同的代码来监视另一种类型的共享记录并且它可以工作。它实际上是一个记录,是这个记录中一个孩子的孩子。所以我不确定为什么这个顶级/父记录在查询时不会显示为被删除。当设备 A 删除记录时(在其私有数据库和设备 B 的共享数据库上),该记录确实会从 CloudKit 中删除。因此,我不相信这不是 CloudKit 上的任何关系或限制。

欢迎任何想法如何追逐这个。在这里待了一个星期。

这是我用来订阅的代码...

这是我用来处理通知并执行上述两个操作的代码。

0 投票
1 回答
386 浏览

swiftui - 如何在新的 SwiftUI 应用生命周期中接受 CloudKit 共享?

在 iOS 13 世界中,我有这样的代码:

我正在将我的应用程序迁移到新的 SwiftUI 应用程序生命周期,但不知道将这个方法放在哪里。它曾经存在于 iOS13 之前的 AppDelegate 中,我试着回到那个,但 AppDelegate 版本永远不会被调用。

似乎没有类似于 UIApplicationDelegateAdaptor 的 SceneDelegateAdaptor 可用,它将为旧代码提供桥梁。

所以,我迷路了。如何在 SwiftUI 应用程序生命周期中接受 CloudKit 共享?

0 投票
0 回答
41 浏览

swift - 参与者如何扭转他们对 CKShare 的接受?

有没有办法实现这种行为——参与者撤销他们对 CKShares 的接受?参与者接受 CKShares 后,他们查看共享并说哦不,我不想为共享贡献任何东西,我什至不想将共享记录保留在他们的 UI 界面的监视列表中。

我们如何将它们从此类协作中删除(确切地说是从共享数据库中删除)?这个用例是非常合法的,因为人们可能会接受一些东西,以便有机会在决定他们是否真的将时间和精力投入到共享中之前先回顾一下。

我曾尝试使用CKModifyRecordZonesOperation删除 CloudKit 共享数据库的共享区域:

但是,似乎无法从任何参与者的 iOS 设备中删除任何共享区域(使用他们的开发 CloudKit Dashboards 可能会工作除外),因为这种尝试之后是 CKError - 不允许删除区域...

0 投票
1 回答
103 浏览

ios - 使用 100% CloudKit 和 SwiftUI 在应用程序中设置社交组件的流程?

我有一个应用程序已经使用 CloudKit 在 iPhone 和 Apple Watch 应用程序之间传递信息。我想添加让用户与其他用户共享保存在 iCloud 中的数据的功能。到目前为止,我还没有找到任何好的资源。我的理解是Apple 建议使用设置共享逻辑UICloudSharingController,但这需要包含在UIHostingControllerSwiftUI 中。我找到了这个答案,但发布的代码使用了一些自定义属性,例如ObjectToShare我无法理解的设置方式。我必须使用UICloudSharingController吗?我可以让一个用户获得自己的 shareURL 并将其发送给另一个用户吗?如果是这样,用户 1 如何获得自己的 shareURL?

0 投票
2 回答
713 浏览

swift - 使用 UIApplicationDelegateAdaptor 从 userDidAcceptCloudKitShareWith 获取回调不起作用

我试图在接到userDidAcceptCloudKitShareWith电话时得到通知。传统上这被称为App Delegate但因为我正在构建一个 iOS 14+ 使用App作为我的根对象。至于如何添加userDidAcceptCloudKitShareWith到我的 App 类中,我还没有找到任何文档,所以我习惯UIApplicationDelegateAdaptor使用一个App Delegate类,但是它似乎userDidAcceptCloudKitShareWith从来没有被调用过?

根据 Asperi 的回答更新:

0 投票
0 回答
80 浏览

cloudkit - UICloudSharingController 在 iOS 15.x 中不显示具有现有共享的“添加人员”,但在 iOS 14.x 中显示

运行 iOS 14.x 或更低版本的 UICloudSharingController 将 Add People 显示为 People 表第一部分的最后一行。

从包括新的 15.2 beta 在内的 iOS 15.x 开始,包含 Add People 的行不存在。

在Apple修复此问题之前,有人知道解决方法吗?Apple 第一方应用程序(如注释)似乎不受此问题的影响,但我使用 UICloudSharingController 共享的所有应用程序都会出现此问题,即使那些未在 xcode 13.x 下重新编译的应用程序也是如此

在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
90 浏览

ios - UICloudSharingController 不显示/不与 CloudKit 应用程序一起使用

我一直在努力让应用程序与 CloudKit 和记录共享一起工作。我创建了几个应用程序,可以在一个用户的设备之间同步 Core Data 记录。我无法让 UICloudSharingController 用于共享记录。我可以显示共享视图控制器,但点击邮件或消息会显示一个键盘,但没有地址字段,也无法关闭视图。我对此感到非常沮丧,以至于我决定从基础开始尝试 Apple“共享”示例应用程序。但是,示例应用程序也不适用于我。

这是示例应用程序的链接: https ://github.com/apple/cloudkit-sample-sharing/tree/swift-concurrency

下面的代码几乎直接来自示例应用程序。

这是 ContentView 文件:

以及共享视图的 UIViewControllerRepresentable 文件:

这是点击共享记录时显示的屏幕。这一切看起来都符合预期:

在此处输入图像描述

这是点击消息后的屏幕(邮件的结果相同)。我看不到任何影响第二个屏幕演示的方法 - 可表示的视图控制器似乎不适用于此版本的 Xcode:

在此处输入图像描述

任何指导将不胜感激。Xcode 13.1、iOS 15 和我在 macOS Monterrey 上。