【问题标题】:How to debug an iOS app extension? [duplicate]如何调试 iOS 应用程序扩展? [复制]
【发布时间】:2018-01-29 17:40:31
【问题描述】:

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

Xcode 9 可以做到这一点吗?

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

我在“设备和模拟器”中查看了我的设备日志,但找不到我从 iOS 应用扩展程序打印的内容。

【问题讨论】:

标签: ios swift ios-app-extension ios-extensions ios-app-group


【解决方案1】:

知道:

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

解决办法:

转到 Xcode >> 调试 >> 附加到进程 >> 然后只需选择您的 appExtension 目标

注意:

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

FWIW 我还遇到了一些奇怪的问题,即运行该应用程序会在启动时崩溃。修复方法是从调试器中分离 appex 并启动正常的应用程序,然后再次附加 appex。


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

【讨论】:

  • 这个答案,尤其是关于扩展程序在被触发之前没有显示在列表中的说明,正是我想要的。不过,我仍然无法在要触发的扩展代码中设置断点。
【解决方案2】:

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

1- 我在我的扩展方案中设置了一个环境变量 OS_ACTIVITY_MODE = default (not disable)

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 我按照你说的做了,但什么也没做,我还尝试将扩展程序附加到进程(我的主应用程序),但控制台或设备的日志上没有任何内容。
    • 我认为 QorumLogs 使用 os_log 所以它应该显示在控制台中,我稍后会尝试,谢谢
    【解决方案4】:

    您可以使用“占位符”变量来打印一些调试消息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2013-05-26
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      相关资源
      最近更新 更多