调试通知扩展

Debug Notification Extensions

我正在构建一组通知扩展 (Service/Content)。 我无法连接到 Xcode 调试器,甚至无法注销到设备日志或控制台。

有没有办法查看任何类型的输出?

将目标更改为 运行 扩展名

然后 select 运行 并从 'Choose an app to run:' window 中选择您的应用。

我已经按照 brendan 的回答进行了尝试,但根本不适合我!

我在控制台中遇到以下错误

Program ended with exit code: 0

然后在 google 上搜索后,我检查了 this answer。然而,这对我也有一段时间没有用!

然后我再次尝试了与答案中相同的步骤,在停止我当前的 运行 应用程序之后。然后遵循相同的 steps.For 清晰度,我正在编写以下步骤:

在 运行 包含扩展程序的应用之后,

1) Set your breakpoint in the extension
2) Select Debug / Attach to Process by PID or name
3) Enter the name of the extension target
4) Trigger the push notification

在第 2 步之前,请务必停止您当前的 运行 应用。

不确定这是否有帮助,但我们有同一个应用程序的多个版本(alpha、beta 等)。尝试调试时不断收到 "don't have permissions to attach" 错误。打开进程列表,我注意到有 2 个名为 notification-extension 的进程,所以 xcode 一定是默认为另一个构建之一。通过手动选择正确的构建,或从我的 phone 中删除其他构建,事情又开始工作了。

这对我有用,可以在扩展的断点处停止并查看扩展日志:

  1. 选择通知扩展方案,而不是主应用方案
  2. 运行 应用程序和 select 列表中的主应用程序 Choose an app to run
  3. 在Xcode中停止应用程序在设备上手动终止;不手动终止它会在第 6 步后导致 Message from debugger: Terminated due to signal 9。 [更新:似乎没有必要在设备上手动终止应用程序,如果不起作用,请尝试任何一种方式。]
  4. Select 菜单 Debug > Attach to Process by PID or Name
  5. 输入正确的扩展名称,而不是主应用名称
  6. 发送推送通知

通知服务扩展 (NSE) 实际上不是您应用的一部分,而是一个扩展,表示它与您的应用具有不同的进程 ID (PID)。您可以通过转到“调试”选项卡让 XCode 监听 phone 上的每个进程,向下滚动到“附加到进程”并查看您的 NSE 是否列在“可能的目标”下.如果它不存在,则尝试将另一个推送通知发送到您的设备并在它出现时附加到它。

现在在debug navigator中你可以看到NES进程,你可以成功调试它。

在我的例子中,上面的所有方法都有一些错误。要点,您需要发送一次推送,然后通过调试器连接,然后发送推送进行调试。所以,完整列表:

  1. 启动应用程序(不是扩展程序)。

  2. 从 XCode 停止应用。

  3. 发送一推。

  4. 通过 "Attach to Process by PID or Name..." 连接到您的扩展进程。

  5. 再发一个推送。

对我有用的唯一方法是查看日志。我使用 xcode 10.1。日志可从 Window -> 设备和模拟器 -> 选择您的设备 -> 单击 'Open Console'。 这样我也可以看到来自扩展的日志。

在我的例子中(Xcode 11.1)调试在这个步骤后开始:

  1. 运行 主应用的通知扩展目标
  2. 将应用切换到后台
  3. 锁定phone!
  4. 向设备发送推送

如果您已经尝试了上述所有解决方案,但仍然挠头想知道为什么没有调用断点点。然后尝试检查您的 extensiondeployment target 它应该小于或等于您的设备 OS.

对我来说,部署目标高于设备OS。