如何调试 iOS 应用程序扩展?
How to debug an iOS app extension?
我正在尝试调试 iOS 应用程序扩展,我所能做的就是设置断点,但能够打印到控制台会很好。
Xcode9 可以吗?
或者至少在某个地方阅读它,也许是一个文件?
我在 "devices and simulators" 中查看了我的设备日志,但找不到我从我的 iOS 应用程序扩展中打印的内容。
您可以像调试任何其他应用程序一样调试应用程序扩展程序,只需选择目标和设备,然后 运行 启用扩展程序。您需要在打开的对话框中选择一个带有扩展名的应用 运行。
从应用程序启动扩展程序后,控制台会清除,您会看到使用 NSLog
或 print
打印的任何内容。 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% 肯定。
我正在尝试调试 iOS 应用程序扩展,我所能做的就是设置断点,但能够打印到控制台会很好。
Xcode9 可以吗?
或者至少在某个地方阅读它,也许是一个文件?
我在 "devices and simulators" 中查看了我的设备日志,但找不到我从我的 iOS 应用程序扩展中打印的内容。
您可以像调试任何其他应用程序一样调试应用程序扩展程序,只需选择目标和设备,然后 运行 启用扩展程序。您需要在打开的对话框中选择一个带有扩展名的应用 运行。
从应用程序启动扩展程序后,控制台会清除,您会看到使用 NSLog
或 print
打印的任何内容。 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% 肯定。