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


241

我想看看如果不使用Xcode测试应用程序,iOS模拟器中会发生什么。

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

我怎样才能做到这一点?

我想在Xcode或Terminal中看到它,但是如果我需要使用其他软件也不是问题。


Answers:


270

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


老办法:

iOS Simulator将其日志直接打印到stdout,因此您可以看到日志与系统日志混合在一起。

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

然后运行模拟器。

编辑:

这停止了​​在Mavericks / Xcode 5上的工作。现在,您可以在其自己的文件夹中访问模拟器日志: ~/Library/Logs/iOS Simulator/<sim-version>/system.log

您可以使用Console.app查看此内容,也可以只做一条尾巴(例如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


7
这仍然准确吗?console.log使用tailConsole.app
Jeff

3
我在OSX 10.10上都没有得到任何结果。这些日志在那里,但是我的模拟器是8.1版,所有日志都是7.1 *版
skift 2014年

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

4
谢谢!但这几天它的〜/ Library / Logs / CoreSimulator / <simulator-hash> /system.log。
calimarkus

6
BYossarian的答案是“正确”的答案。“桌面浏览器中的“开发”菜单,可让您查看iOS模拟器控制台:“开发”->“ iPhone模拟器”->“站点名称””
snobojohan

222

您可以通过桌面Safari查看iOS模拟器的控制台。这类似于您使用桌面Safari查看物理iOS设备的控制台的方式。

每当模拟器运行且打开网页时,桌面浏览器中的“开发”菜单下都会有一个选项,可让您查看iOS模拟器控制台:

开发-> iPhone模拟器-> 网站名称


31
这是最好的答案,就像浏览器的“真实”控制台一样,您可以即时执行javascript命令。谢谢。
Jorge FuentesGonzález13年

4
为什么在其他任何地方都看不到此文档?辉煌。
萝卜

4
网络检查器(通过这种方式访问​​)对我来说完全空白(Mavericks Macbook Pro-已安装所有更新
-Safari

5
Safari似乎检测到该模拟器是打开的,但是它指出“没有可检查的应用程序”
nickmorss 2014年

4
您在说什么...这只会为在模拟器的任何webview中打开的网站打开Web调试器。您在其中看到的控制台消息记录在javascript上下文中。这些不是ios模拟器的日志。我想念什么吗?也许苹果改变的东西,因为2013年,但今天的这个答案有问题的标题一个高得离谱的成绩
拉杜Simionescu

107

模拟器中有一个选项可以打开 console

Debug > Open System Log

或使用

keyboard shortcut: ⌘/

模拟器菜单屏幕截图


90

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中,单击Windows>设备。设备和标识符将显示在右侧窗格中。
neilco 2014年

3
您可以instruments -s devices在控制台中输入
viteinfinite,2015年

2
s /控制台/终端窗口/
mharper

28

你不应该依靠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 Developer工具(包括JS控制台):启动其中一个模拟器,打开Safari,然后在Mac上转到Safari,并且应该在菜单中看到Simulator。

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


从Xcode 9.3,iOS 11开始,这是正确的答案。其他答案中提到的位置不再正确。
Michael McGuire

这适用于Xcode版本10.1(10B61),iOS 12.1模拟器。使用它来查看Emacs中的iOS应用程序控制台输出。其他答案在过去有效,但不再有效。
tboyce12

对我而言,起作用的是顺序(我在模拟器之前打开了Safari,因此菜单项未出现在Safari中)!
Shmarkus

您在哪里找到“谓词”标志的文档?
胡勒

18

如果您使用的是Swift,请记住这println只会打印到调试日志(出现在xCode的调试区域中)。如果要打印到system.log,则必须使用NSLog以前的方式。

然后,您可以通过菜单Debug> Open System Log ...(cmd + /)查看模拟器日志。


12

拖尾/var/log/system.log对我不起作用。我使用找到了日志Console.app。他们在

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


这是回顾例如几天前日志的好方法。
Troy

10

您可以使用ConsoleMac上的应用程序(在“设备”中选择设备)来查看使用发送的日志消息NSLog(您将不会看到来自print功能的日志)。

在此处输入图片说明

请注意,如果您想查看日志,WebView请使用Safary -> Develop -> device

[查找崩溃日志]


cmd then space bar 类型“ Console”记者enter。顺便说一句。今天应该是正确的答案。
寂寞

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中使用的模拟器类型作为参数。如以上文章所述,有simctl和instruments命令可根据Xcode版本查看可用的模拟器类型。查看可用设备/模拟器的列表。

xcrun instruments -s

要么

xcrun simctl list

现在,您可以将设备代码或模拟器类型作为脚本的参数传递,并将grep中的“ iPhone 6(8.2 Simulator)”替换为$ 1


0

我可以直接通过iOS模拟器打开日志:Debug -> Open System Log...不确定何时引入该日志,因此它可能不适用于早期版本。


0

通过使用Safari Technology Preview应用程序,您可以看到Simulator控制台窗口,包括Safari Web Inspector和所有Web开发工具。在模拟器上的Safari中打开您的页面,然后转到Safari技术预览>开发>模拟器。

网站开发工具


0

NSLogprint内容将写入system.log,可以通过Simulator -> Debug -> Open System logXcode 11上的Select打开。

我想出一个办法,写日志到一个文件并打开xx.logTerminal.app。那么日志将呈现Terminal.app热闹。

我使用CocoaLumberjack实现此目的。

第1步:

添加DDFileLogger DDOSLogger并打印日志路径。config()App午餐时应调用。

static func config() {
    #if DEBUG
    DDLog.add(DDOSLogger.sharedInstance) // Uses os_log
    let fileLogger: DDFileLogger = DDFileLogger() // File Logger
    fileLogger.rollingFrequency = 60 * 60 * 24 // 24 hours
    fileLogger.logFileManager.maximumNumberOfLogFiles = 7
    DDLog.add(fileLogger)
    DDLogInfo("DEBUG LOG PATH: " + (fileLogger.currentLogFileInfo?.filePath ?? ""))
    #endif
}

第2步:

更换printNSLog使用DDLogXXX

步骤3:

$ tail -f {path of log}

在这里,消息将实时显示在Terminal.app中。

还有一件事。如果没有任何消息注销,请确保Environment Variables-> OS_ACTIVITY_MODEISNOT disable。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.