如何使用 CloudKit 数据库订阅为 mac-catalyst 应用程序调试 "Error acquiring assertion"?

How to debug "Error acquiring assertion" with CloudKit database subscription for mac-catalyst app?

我有一个可用的本机 iPhone/iPad 应用程序,我现在正尝试将其用作 Mac Catalyst 应用程序。一切似乎都正常,除了当我在 iOS 版本上输入内容时,它是 "breaks" 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">

行为真的很奇怪。 macOS 版本实际上并没有崩溃,但主要的 window 消失了,我必须在 XCode 中重新构建它 运行 它。我试过在通知流中添加断点等,但没有任何东西可以捕捉到,所以我真的很困惑。 None 的常用应用程序方法在收到通知时被调用。同样的问题出现在调试模式下,无论是模拟器和设备,还是生产。

真心希望得到指点,where/how调试这类问题。我已经检查了系统日志,也没有找到任何东西。

我自己 运行 研究了一下,并最终弄明白了:您的计算机上可能有多个应用程序实例(具有该捆绑包 ID),并且推送通知服务正在尝试旋转使用错误的二进制文件来传递通知。

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

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

希望对您有所帮助!