如何调试 iOS 应用程序扩展?

How to debug an iOS app extension?

我正在尝试调试 iOS 应用程序扩展,我所能做的就是设置断点,但能够打印到控制台会很好。

Xcode9 可以吗?

或者至少在某个地方阅读它,也许是一个文件?

我在 "devices and simulators" 中查看了我的设备日志,但找不到我从我的 iOS 应用程序扩展中打印的内容。

您可以像调试任何其他应用程序一样调试应用程序扩展程序,只需选择目标和设备,然后 运行 启用扩展程序。您需要在打开的对话框中选择一个带有扩展名的应用 运行。

从应用程序启动扩展程序后,控制台会清除,您会看到使用 NSLogprint 打印的任何内容。 NSLog 消息也应该出现在设备日志中,但很难检测到。

我推荐使用 QorumLogs,它为您提供结构化和彩色的日志输出,这样您就不会错过任何消息。

我找到了一种方法,它并不完美,但至少我现在可以看到我打印的内容。 我使用了 os_log("this is what i will see") 函数(你必须导入 os)

1- 我在我的扩展方案中设置了一个环境变量 OS_ACTIVITY_MODE = 默认值(未禁用)

2- i 运行 在我的设备中构建我的应用程序

3- 我将我的扩展附加到一个进程(我的应用程序)

4- 您可以在控制台应用程序中查看您的日志(打开 /Applications/Utilities/Console.app)或打开 Windows -> 设备和模拟器以查看您的设备控制台。

控制台应用选项是最好的。

您可以使用 "placeholder" 变量打印一些调试消息

知道:

  • 在任何给定时间您只能调试 1 个目标
  • 目标必须附加到 Xcode 的调试器
  • 应用扩展是与其包含的应用(目标)不同的目标

解决方案:

转到 Xcode >> 调试 >> 附加到进程 >> 然后 select 您的 appExtension 目标

注:

如果您正在尝试调试由 OS 触发的 扩展,那么您需要做一些事情以便 OS 触发它.只有这样你才能将它附加到调试器。示例:如果您正在尝试调试 'Notification Service Extension',那么在 将 iPhone 连接到您的 之后,您只会在目标列表中看到它Mac 并发送推送通知以打开服务扩展。

FWIW 我也 运行 遇到奇怪的问题是 运行 应用程序会在启动时崩溃。解决方法是从调试器中分离 appex 并启动普通应用程序,然后再次附加 appex。


相信 如果你也使用 os.log 它也只会登录到控制台,但我对此不是 100% 肯定。