如何使用适用于 mac-catalyst 应用程序的 CloudKit 数据库订阅调试“获取断言时出错”?

mar*_*and 3 macos ios swift cloudkit mac-catalyst

我有一个可运行的原生 iPhone/iPad 应用程序,我现在正尝试将其用作 Mac Catalyst 应用程序。一切似乎都在工作,除了当我在 iOS 版本上输入某些内容时,它“破坏”了 macOS 版本——我正在使用 CloudKit 和 CloudKit 订阅来监听数据库中的变化。

我把这个记录到日志中 3 次:

2020-04-25 09:58:35.612887+0300 MyApp[2871:206093] [assertion] Error acquiring assertion: <NSError: 0x600000d4cb40; domain: RBSAssertionErrorDomain; code: 2; reason: "Specified target process does not exist">
2020-04-25 09:58:35.613919+0300 MyApp[2871:206093] [assertion] Error acquiring assertion: <NSError: 0x600000d4d290; domain: RBSAssertionErrorDomain; code: 2; reason: "Specified target process does not exist">
2020-04-25 09:58:35.615102+0300 MyApp[2871:206093] [assertion] Error acquiring assertion: <NSError: 0x600000d4de00; domain: RBSAssertionErrorDomain; code: 2; reason: "Specified target process does not exist">
Run Code Online (Sandbox Code Playgroud)

这种行为真的很奇怪。macOS 版本实际上并没有崩溃,但主窗口消失了,我必须在 XCode 中重建它并再次运行它。我试过在通知流中添加断点等,但没有任何捕获,所以我真的很难过。收到通知时,不会调用任何常用的应用程序方法。同样的问题出现在调试模式下,无论是模拟器和设备,还是生产中。

真的希望得到一些指示,在哪里/如何调试这种问题。我检查了系统日志,也找不到任何东西。

小智 6

我自己刚刚遇到了这个问题,并最终想通了:您的机器上可能有多个应用程序实例(具有该捆绑 ID),并且推送通知服务正试图启动错误的二进制文件来传递通知。

由于 Catalyst 应用程序在尝试打开多个实例时会被破坏,因此此后台启动会杀死您在调试器中运行的应用程序。

就我而言,我在 /Applications 中安装了 App Store 版本的应用程序(在我开始添加 CloudKit 之前),并且在我的 Xcode 构建根目录中安装了我当前的开发二进制文件。

希望有帮助!