如何用 Xcode 来调试 App Extension?

| iOS , Xcode , 测试 , Extension

 

内容概览

  • 前言
  • 确定 App Extension 启动的时机(扩展点)
  • 连接 App Extension 的进程
  • 搜索进程名,等待进程启动和连接
  • 总结

 

前言

 

App Extensions 可以有效地扩展应用的使用场景,让用户更便捷地享用我们提供的服务。

某些 App Extensions 相对来说会比较常见,如:Home 页面的小插件(Widget)、拓展分享渠道、交互式的推送通知等等。

越来越多的应用开始支持 App Extensions,调试 App Extension 自然必不可少。如何调试并且高效地调试就变成了一个我们需要解决的问题。

可能有朋友会说,在 Scheme 处选中 App Extension,然后直接运行就可以了。

抱歉,这样做是不行的呢!如果您也这样认为,那么 Ficow 建议您去回顾官方文档对 App Extension 的讲解。实际上,App Extension 是不可以作为可执行程序独立运行的,它只能被动地被系统启动。

现在,和 Ficow 来了解一下相关的内容吧~

 

确定 App Extension 启动的时机(扩展点)

 

不同的 App Extension 有不同的使用场景,这个启用了 App Extension 的场景(系统区域)叫做扩展点(extension point)。

App Extension 只会在其所属的扩展点被启动,所以如果要调试 App Extension,我们要先确定 App Extension 的扩展点。

本文将会以 Notification Service (iOS) 这种 App Extension 为例,来进行后续的讲解。

Notification Service Extension (UNNotificationServiceExtension) 可以在接收到远程推送后,对推送内容进行修改,比如:下载一张图标或者高清大图并附加到推送消息内。然后,用户就可以看到富文本推送,而不再只是一串普通的文本。

所以,Notification Service Extension 的扩展点就是 在系统收到远程推送后至系统展示推送内容之前。我们需要确保该 Extension 的进程在这个场景被正常启动,随后我们才可以对其进行调试(在 Xcode 中为该 Extension 设置的断点才会被击中)。

如需查看完整的扩展点列表,请参考 Table 1-1 Extension points on Apple platforms

 

连接 App Extension 的进程

 

如果 App Extension 已经在运行,您可以通过 Xcode 的菜单 Debug - Attach to Process 浏览并查找该进程:

请注意分区,上面的 Applications 区域是普通应用的进程,下面有个 System 区域都是系统进程:

另外,如果进程实在太多,您可以按下首字母,Xcode 会自动跳转到那个字母对应的区间。

然而,对于类似 Notification Service Extension 这种会在某个时期启动,然后自动停止的进程,可能需要借助查找功能才能更好地监控。否则,您可能需要在发送了远程推送后,尽快去 Attach to Process 列表寻找相关的进程。

如果进程在被启动后很快又被终结了,导致您无法在列表中发现该进程,您也可以尝试让该进程睡眠一段时间,比如:

sleep(10) // 睡眠 10 秒

 

搜索进程名,等待进程启动和连接

 

如果您已经知道进程的 ID 或者名称,您可以直接进行查找:

比如,现在已经确定了该进程的名称为: NotificationService,那么就可以在输入完名称后点击 Attach 按钮:

请注意红色线部分的内容,如果该进程未运行,调试器会一直等待。

对于这个示例而言,在系统未收到远程推送时,调试器会一直等待,直到某个叫做 NotificationService 的 App Extension 进程被启动。

多亏了该功能,Ficow 和 Wiley(战斗伙伴) 调试 App Extension 进程的工作轻松了不少,感恩~

 

如果您看到这种错误,那么很可能是没有找对进程:

建议先确认输入的名称或者 PID 是否正确。

如果进程名存在重名情况,您就需要自行检查 Xcode 应该连接的是哪一个进程:

 

总结

 

其实没啥好总结的,哈哈~

对于工具的使用,Ficow 的原则就是:效率至上,哪种方式更高效就用哪种。

希望本文对大家有帮助,如有错误也欢迎指出!

 

参考内容:

App Extensions - Apple
App Extension Programming Guide
How to debug an iOS app extension?
 

觉得不错?点个赞呗~

本文链接:如何用 Xcode 来调试 App Extension?

转载声明:本站文章如无特别说明,皆为原创。转载请注明:Ficow Shen's Blog

评论区(期待你的留言)