如何调试iOS Notification Service Extension

在移动部门中,我们正在更新通知,并且当我们想在收到推送通知时在扩展中调试代码时发现了一些问题。 首先,我将解释两种典型的解决方法:

一方面,您必须更改目标以运行扩展:

运行后,您必须从“选择要运行的应用程序”窗口中选择您的应用程序。

之后,将启动该应用程序,并且在收到推送通知时,断点将起作用。

另一方面,您可以使用Xcode的Debug(调试)> Attach to Process(附加到进程)> By Process Identifier(PID)或Name…(名称…)菜单:您可以提供进程的名称,Xcode将等待它启动以附加并启动调试会话。

另外,我将解释另一种方法,当收到推送通知并且您的应用终止时,知道您的扩展中发生了什么,我将谈论日志。

日志

在编程时,我们可以轻松地从Xcode调试控制台读取日志,因为调试器仅显示当前的应用程序日志,而没有其他内容。 日志很容易阅读。 但是在我们的情况下,如果断点有问题,我们将遇到来自Xcode调试的日志相同的问题(不会打印日志),因此我们将在设备控制台中进行编写。 但是现在,您可能会担心,因为设备控制台中每秒有很多OS日志输出😖。 没问题,因为使用os.log 框架,我们将在控制台filter中过滤日志。

易于使用。 首先,您必须在扩展中导入框架。

 导入os.log 

然后,我们只需要使用不同的参数调用os_log ()函数即可。 看起来像这样:

  os_log(“%{public} @”,日志:OSLog(子系统:bundleIdentifier,类别:“ myExtension”),类型:OSLogType.debug,“推送收到!”) 

但是……每个参数是什么? 让我们来看看💡:

  • 第一个参数是每个消息的访问级别。 如果未提供,则将其视为私人。 如果为私有,则在应用程序未附加Xcode Debugger的情况下,不会打印该值。
  • 第二个参数是参数列表,可用于过滤设备控制台中的消息。
  • 第三个参数指示日志消息的不同类型(调试,信息,错误等)。 默认情况下,控制台隐藏调试日志消息,因此,如果需要,您需要在控制台>操作菜单中启用它们。
  • 最后一个参数是您要打印的任何参数。

如果尝试该示例,则尽管应用程序处于后台或已终止,但在收到推送通知时,我们仍会在设备控制台中看到此消息。

最后,我们可以看到,当收到推送通知时,我们有不同的方式来查看扩展中的情况。 鉴于这三个选项,您选择了最适合您的一个😃