我该如何从iOS模拟器获取控制台日志?

310

我想在不使用Xcode测试应用程序的情况下查看iOS模拟器中发生的情况。

例如,如果我在Safari模拟器中打开链接,请查看控制台中发生的情况, 或者如果我安装一个Web应用程序,请在控制台中查看我点击的链接。

我该怎么做呢?

我想在Xcode或终端中查看它,但如果需要使用其他软件也没有问题。


参见:https://dev59.com/pV4b5IYBdhLWcg3w3k2Y#29310542 - Dave Jarvis
16个回答

313

iOS模拟器 > 菜单栏 > 调试 > 打开系统日志


传统方法:

iOS模拟器将其日志直接打印到标准输出(stdout),因此您可以看到与系统日志混在一起的日志。

打开终端并键入:tail -f /var/log/system.log

然后运行模拟器。

编辑:

这在Mavericks/Xcode 5上已经无法使用。现在,您可以在它自己的文件夹中访问模拟器日志:~/Library/Logs/iOS Simulator/<sim-version>/system.log

您可以使用Console.app查看它,或者只需运行tail命令(ios 7.0.3 64位为例):

tail -f ~/Library/Logs/iOS\ Simulator/7.0.3-64/system.log

编辑2:

现在,它们位于~/Library/Logs/CoreSimulator/<simulator-hash>/system.log

tail -f ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log


14
这还准确吗?使用“tail”或“Console.app”查看这些日志,我没有看到来自“console.log”的任何内容。 - Jeff
75
iOS模拟器 > 菜单栏 > 调试 > 打开系统日志 - pkamb
4
谢谢!不过现在应该是~/Library/Logs/CoreSimulator/<模拟器哈希值>/system.log。 - calimarkus
7
BYossarian的回答是“正确”的。在桌面版Safari浏览器中开发菜单中,可以找到iOS模拟器控制台:开发 -> iPhone模拟器 -> 网站名称 - snobojohan
5
如果您不确定要使用哪个“<simulator-hash>”(我也是),您还可以简单地执行以下操作:“tail -f ~/Library/Logs/CoreSimulator/*/system.log”,这将呈现所有日志,但仅保留持续更新的日志(最可能是正在运行的模拟器)。 - Roberto Andrade
显示剩余4条评论

263
您可以通过桌面版Safari查看iOS模拟器的控制台。与查看物理iOS设备的控制台的方式相似。
只要模拟器正在运行并且有一个网页打开,就会在桌面版Safari的“开发”菜单下出现一个选项,让您可以查看iOS模拟器的控制台:
开发 -> iPhone 模拟器 -> 站点名称

1
请注意,您需要运行iOS >= 6的设备或模拟器。您可能还需要在iOS上启用Web Inspector支持(设置应用程序> Safari>高级)。 - Julian D.
2
看起来现在只有:开发 > 模拟器 > (你的模拟器名称) - Matt Jensen
3
为了得到这个答案所描述的选项,我必须先打开模拟器,然后重新启动Safari。但是之后它就像魔法一样奏效了。 - Zeth
3
这是唯一对我有效的方法。另外,您首先需要启用“开发”菜单,方法是:首选项>高级>[勾选]在菜单栏中显示“开发”菜单。 - Maximiliano Guerra

120

模拟器中有一个选项可以打开控制台

Debug > Open System Log
或者使用键盘快捷键:

⌘/

模拟器菜单截图


94

iOS 8 和 iOS 9

在 iOS 8 和 iOS 9 中,此位置现在为:

~/Library/Logs/CoreSimulator/<DEVICE_CODE>

所以,以下内容将有效:

tail -f ~/Library/Logs/CoreSimulator/<DEVICE_CODE>/system.log

DEVICE_CODE的值可以通过以下终端命令找到:

instruments -s devices

1
要查找设备标识符:在 Xcode 中,单击“窗口”>“设备”。设备和标识符将显示在右侧窗格中。 - neilco
3
你可以在控制台输入 instruments -s devices - viteinfinite
2
返回已翻译的文本:s/console/终端窗口/ - mharper
2
这对我没用。xcrun simctl spawn booted log stream --level=debug | grep App_Debug_String 可以使用。 - rustyMagnet
@viteinfinite 找不到 instruments 命令。instruments 位于哪里? - Martin Braun

45

不应依赖于 instruments -s。官方支持的从命令行操作模拟器的工具是 xcrun simctl

设备的日志目录可以通过 xcrun simctl getenv booted SIMULATOR_LOG_ROOT 找到。即使位置发生更改,这也将始终是正确的。

现在随着事物转移到 os_log,在主机 Mac 上打开 Console.app 更加容易。启动的模拟器应该显示为左侧的日志来源,就像实体设备一样。您也可以在启动的模拟器中运行日志命令:

# os_log equivalent of tail -f
xcrun simctl spawn booted log stream --level=debug

# filter log output
xcrun simctl spawn booted log stream --predicate 'processImagePath endswith "myapp"'
xcrun simctl spawn booted log stream --predicate 'eventMessage contains "error" and messageType == info'

# a log dump that Console.app can open
xcrun simctl spawn booted log collect

# open location where log collect will write the dump
cd `xcrun simctl getenv booted SIMULATOR_SHARED_RESOURCES_DIRECTORY`

如果您想在模拟器中使用Safari开发人员工具(包括JS控制台):启动其中一个模拟器,打开Safari,然后在您的Mac上进入Safari菜单,您应该看到模拟器。

您可以通过从Safari地址栏拖动并将其放在模拟器窗口上来在模拟器中打开URL。 您也可以使用xcrun simctl openurl booted <url>


1
这是截至Xcode 9.3,iOS 11的正确答案。其他回答中提到的位置已不正确。 - Michael McGuire
这对我在Xcode版本10.1(10B61),iOS 12.1模拟器上有效。使用它在Emacs中查看iOS应用程序控制台输出。其他答案过去有效,但现在不再有效。 - tboyce12
对我来说,起作用的是顺序(我在模拟器之前打开了Safari,因此菜单项没有出现在Safari中)! - Shmarkus
我已经开始在Swift中使用Logger来记录信息消息。但是我在Console.app中看不到它们。我看到的是当我启动应用程序时运行模拟器的一些系统事件。如何查看这些Logger信息消息?是否有文件可以解释如何做到这一点? - Victor Engel
不确定这个什么时候发生的变化,但是在使用Xcode 14.3.1和运行iOS 17的模拟器时,xcrun simctl spawn booted log collect命令输出的结果是:成功将归档写入到/Users/<user>/Library/Logs/CoreSimulator/<simulator_guid>/system_logs.logarchive,这样我就可以打开结果了。而xcrun simctl getenv booted SIMULATOR_SHARED_RESOURCES_DIRECTORY命令的输出是/Users/<user>/Library/Developer/CoreSimulator/Devices/<simulator_guid>/data。花了几分钟困惑,因为我找不到日志文件,原来是我在错误的目录下。 - undefined
显示剩余4条评论

26

苹果日志

[iOS Logger]

您可以使用Mac上的Console应用程序(在设备中选择您的设备)来查看使用NSLogos_logLogger发送的日志消息(您将无法看到print函数的日志)。

另外,请检查(操作 -> 包括<信息/调试>消息)

enter image description here

请注意,如果您想查看来自WebViewUIWebViewWKWebView)的日志,您应该使用Safari Web Inspector。
Device
- Settings -> Safari -> Advanced -> <check in> Web Inspector
Mac
- Safari -> Settings -> Advanced -> <check in> Show Develop menu in menu bar
- Develop -> <device>

[查找崩溃日志]


按下 cmd 键,然后按下空格键。输入 "控制台",再按下回车键。顺便说一句,这应该是今天的正确答案。 - user3025289
这是获取模拟器所有日志的唯一真正解决方案,与 Android 上的 logcat 进行比较。 - Martin Braun

21
如果您正在使用Swift,请记住println仅会打印到调试日志(显示在xCode的调试区域中)。如果您想要打印到system.log,则必须像以前一样使用NSLog。接着,您可以通过菜单Debug > Open System Log... (cmd + /)查看模拟器日志。

12

tailing命令/var/log/system.log对我来说不起作用。我通过使用Console.app找到了我的日志。它们位于

~/Library/Logs/iOS Simulator/{version}/system.log


这是一个很好的方法,可以查看例如几天前的日志。 - Troy

7

XCode > 6.0 AND iOS > 8.0

如果您的XCode版本大于8.0,则下面的脚本可以正常运行。

我使用下面的小脚本将模拟器日志输出到系统控制台。

#!/bin/sh
sim_dir=`xcrun instruments -s | grep "iPhone 6 (8.2 Simulator)" | awk {'print $NF'} | tr -d '[]'`
tail -f ~/Library/Logs/CoreSimulator/$sim_dir/system.log

您可以将Grep中使用的模拟器类型作为参数传递。如上所述,根据Xcode版本,有simctl和instruments命令可用于查看可用于使用的模拟器类型列表。

要查看可用设备/模拟器的列表,请执行以下操作:

xcrun instruments -s

或者

xcrun simctl list

现在您可以将设备代码或模拟器类型作为参数传递给脚本,并将grep内的“iPhone 6(8.2模拟器)”替换为$1。请注意保留HTML标记。

3
在Xcode中: 视图->调试区域->激活控制台

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接