| iOS , Xcode , 测试 , Extension
App Extensions 可以有效地扩展应用的使用场景,让用户更便捷地享用我们提供的服务。
某些 App Extensions 相对来说会比较常见,如:Home 页面的小插件(Widget)、拓展分享渠道、交互式的推送通知等等。
越来越多的应用开始支持 App Extensions,调试 App Extension 自然必不可少。如何调试并且高效地调试就变成了一个我们需要解决的问题。
可能有朋友会说,在 Scheme
处选中 App Extension
,然后直接运行就可以了。
抱歉,这样做是不行的呢!如果您也这样认为,那么 Ficow 建议您去回顾官方文档对 App Extension 的讲解。实际上,App Extension 是不可以作为可执行程序独立运行的,它只能被动地被系统启动。
现在,和 Ficow 来了解一下相关的内容吧~
不同的 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 已经在运行,您可以通过 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