错误检查:CloudKit MacCatalyst didReceiveRemoteNotification

2024-01-30

我正在使用 MacCatalyst 将 iOS/iPadOS 应用程序移植到 MacOS。该应用程序以所有方式使用 CloudKit 和功能,除了以下一种方式:UIApplicationDelegate方法,didReceiveRemoteNotification,当从其他设备提交 CloudKit 更新时,不会在 MacOS 版本上调用

应用程序中有效的功能:

  • 正在提交CKDatabaseOperation包括 CloudKit 的更新和订阅
  • 从 CloudKit 手动检索数据库更新
  • UIApplicationDelegate method didRegisterForRemoteNotificationsWithDeviceToken火灾和UIApplication.isRegisteredForRemoteNotifications调用时返回trueUIApplication.registerForRemoteNotifications
  • 设置CKSubscription.NotificationInfo调用在 MacOS 中正确显示的警报通知
  • UNUserNotificationCenterDelegate方法,willPresent,当调用警报通知并且应用程序位于前台时
  • didReceiveRemoteNotification在 iOS 和 iPad(物理设备)上

有没有人有过UIApplicationDelegate方法,didReceiveRemoteNotification,在使用 MacCatalyst 时调用?

更新: 该应用程序最终确实触发了didReceiveRemoteNotification发送更新后 30 分钟后调用该方法,但对于其他更新,即使在几小时后也不会触发该方法。有任何想法吗?


我有一个可能的解决方案,尽管我看到的问题与您描述的略有不同。这是快速版本:至少使用.userInitiated qualityOfService在催化剂上。

这就是我认为正在发生的事情。

CKOperation.h 提供了此文档:

@discussion CKOperations behave differently depending on how you set qualityOfService.
 *
 *  @code
 *  Quality of Service | timeoutIntervalForResource | Network Error Behavior | Discretionary Behavior
 *  -------------------+----------------------------+------------------------+-----------------------
 *  UserInteractive    | -1 (no enforcement)        | fail                   | nonDiscretionary
 *  UserInitiated      | -1 (no enforcement)        | fail                   | nonDiscretionary
 *  Default            | 1 week                     | fail                   | discretionary when app backgrounded
 *  Utility            | 1 week                     | internally retried     | discretionary when app backgrounded
 *  Background         | 1 week                     | internally retried     | discretionary
 *  @endcode
 * timeoutIntervalForResource
 * - the timeout interval for any network resources retrieved by this operation
 * - this can be overridden via CKOperationConfiguration's timeoutIntervalForResource property
 *
 * Network Error Behavior
 * - when a network request in service of a CKOperation fails due to a networking error, the operation may fail with that error, or internally retry the network request.  Only a subset of networking errors are retried, and limiting factors such as timeoutIntervalForResource are still applicable.
 *
 * Discretionary Behavior
 * - network requests in service of a CKOperation may be marked as discretionary
 * - discretionary network requests are scheduled at the description of the system for optimal performance
 *
 * CKOperations have a default qualityOfService of Default.

请注意,默认的自由裁量行为是“应用程序后台运行时的自由裁量”,并且自由裁量行为的描述表示“自由裁量网络请求在系统的[自由裁量]上进行调度,以获得最佳性能”。我认为这就是 Catalyst 中正在发生的事情;如果应用程序不在前台,则请求将变得可自由裁量——即可推迟。而且,就我而言,延期似乎是无限期的。

这就是我所看到的。

  • 我在 iPhone 上启动了该应用程序
  • 我在 Mac 上启动了该应用程序
  • 我将 Mac 应用程序置于“后台”(即,它不再处于活动状态)
  • 我在 iPhone 上进行了更改
  • Mac 收到远程通知
  • 为了响应远程通知,Mac 尝试下载(获取)记录
  • 下载请求从未完成

这就是我所做的。

我已经分配了一个CKOperationGroup https://developer.apple.com/documentation/cloudkit/ckoperationgroup致我所有的CKOperation https://developer.apple.com/documentation/cloudkit/ckoperations,并且我已经分配了一个值defaultConfiguration.qualityOfService。在 Catalyst 上我改变了一些东西,以便最小化qualityOfService我分配的是.userInitiated。这使得问题在测试中消失了。 (需要明确的是,我尝试了很多方法;这是唯一有效的方法。)我昨晚将一个版本投入生产,并且 - 至少到目前为止 - 我也不再看到那里的问题。

如果你不使用CKOperationGroup https://developer.apple.com/documentation/cloudkit/ckoperationgroups,不用担心,您可以设置qualityOfService直接在CKOperation https://developer.apple.com/documentation/cloudkit/ckoperations;这应该同样有效,只是不完全是我所做的。

我通过反馈向 Apple 提交了错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误检查:CloudKit MacCatalyst didReceiveRemoteNotification 的相关文章

  • window.speechSynthesis.getVoices() 在 macOS safari 15.4 上返回空数组

    功能window speechSynthesis getVoices 在我的浏览器 macOS 12 3 1 Safari 15 4 上返回一个空数组 在以前的版本 Safari 15 3 macOs 12 2 上 该函数按照预期返回一个包
  • 调整在drawRect中绘制的矩形的大小

    我有两个UIViews 我的目标是绘制包含这两个的最小矩形UIViews 我想用我要摆脱的框架画一个矩形 CGRectUnion view1 frame view2 frame 但是当我移动两者中的任何一个时UIViews 我需要更新轮廓矩
  • 如何了解xcode调试中的CPU和内存消耗

    在 Xcode 5 中 有一个新的调试面板 分别以 和 MB 为单位显示 CPU 和内存消耗 我们如何利用这个 我应该尝试保持在以下 CPU 百分比阈值吗 我有时会看到我的应用程序达到 100 或以上 这是否意味着我在应用程序中进行了太多处
  • 在 iPhone 上使用 Xcode Auto Layout 处理不同的图像尺寸

    通过纵向 iPhone 的自动布局 我不希望 iPhone 6 上的游戏角色的 UIImageView 尺寸与 iPhone 4S 中的完全相同 4S 的角色需要更小一些 否则看起来会太大 使用自动布局如何更改 iPhone 之间的图像尺寸
  • 清空 Firebase DatabaseReference 不会停止观察,这绝对正确吗?

    In the Firebase 太棒了 你做这个 var r1 DatabaseReference nil 然后这个 r1 Database database reference withPath score bucks r1 observ
  • CSV 解析 - Swift 4

    我正在尝试解析 CSV 但遇到一些问题 下面是我用来解析 CSV 的代码 let fileURL Bundle main url forResource test application data Sheet 1 withExtension
  • 循环缓冲区录音 iOS:可能吗?

    我的一个客户想要连续录制音频 当他单击 提交 时 他只想提交最后 10 秒的内容 所以他想要连续记录并且只保留最后 x 秒 我认为这需要类似循环缓冲区的东西 但是 作为 iOS 的新手 它看起来像AVAudioRecorder只能写入文件
  • 进入/退出编辑模式时重绘 UITableViewCell

    我有一个表格视图 其中根据表格是否正在编辑 单元格的构建方式有所不同 具体来说 处于编辑模式时选择样式为无 非编辑模式时选择样式为蓝色 当我从一个单元转换到另一个单元时 我注意到某些单元格没有更新 快速的日志记录告诉我 即使单元格的外观发生
  • 恢复从未付款过的用户的应用内购买

    我正在尝试在我的应用程序中测试应用程序内购买 当我与购买了应用程序内购买的测试用户恢复应用程序内购买时 一切正常 但是当我尝试与用户恢复应用内购买时didn t在我期望框架调用以下方法之前进行应用内购买 paymentQueue resto
  • UITextField 文本更改事件

    如何检测文本字段中的任何文本更改 委托方法shouldChangeCharactersInRange适用于某些东西 但它并不能完全满足我的需求 因为在它返回 YES 之前 textField 文本不可用于其他观察者方法 例如在我的代码中ca
  • 显示不带字母的数字键盘

    iOS 默认数字键盘中是否有隐藏数字下方字母的选项 对于某些电话语言 键盘显示时不带字母 抱歉 你所要求的是不可能的 这取决于键盘语言 只有用户可以更改键盘语言 我希望这能帮到您
  • 如何在 Mac 上使用 Process.Start() 或等效的 Mono 并传入参数

    我正在尝试编写一些 C 代码来启动浏览器Process Start app args 其中 apps 是浏览器的路径 例如 Applications Google Chrome app Contents MacOS Google Chrom
  • :hover 状态在 iOS 上不会结束

    我有一个带有悬停状态的简单菜单
  • UISegmentedControl 中的自定义字体禁用调整FontSizeToFitWidth

    我已经为我的 UISegmentedControl 设置了自定义字体 但它似乎禁用了默认字体自动调整字体大小以适合宽度范围 Before After 这是我用来设置自定义字体的代码 UISegmentedControl segmentedC
  • BUG - 在 IOS 中没有选择标签的完成按钮

    我正在使用最新的离子并有一个简单的选择标签
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • TDD iOS 教程 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您好 我正在寻找非常好的 iOS TDD 教程 请您帮助我 什么是最好的 iOS TDD 书籍 博客
  • 允许的 APNS 持续连接数量是多少?

    我正在尝试编写服务器端代码来为我的应用程序发送推送通知 根据 Apple 的建议 我计划保留连接并根据需要发送推送通知 Apple 还允许打开和保留多个并行连接以发送推送通知 您可以与同一网关或多个网关实例建立多个并行连接 为此 我想维护一
  • iOS 中如何清除特定域的 cookie?

    我已经搜索了 StackOverflow 上的几乎所有问题来寻找我的问题的答案 我还没有找到任何有用的链接或教程来说明哪种方式最好清除特定域的 cookie 如果有人可以帮助我 请 我自己找到了解决方案 如果您想删除 UIWebView 中
  • Swift 中的“funcobserveValueForKeyPath(keyPath:NSString,object:AnyObject,change:NSDictionary,context:Void)”问题

    我已经为 AVPlayer 添加了一个观察者 如下所示 self audioPlayer addObserver self forKeyPath currentItem status options NSKeyValueObservingO

随机推荐