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

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

例如,如果我在Safari模拟器中打开一个链接,看看控制台会发生什么, 或者如果我安装了一个web应用程序,可以看到我在控制台按下的链接

我该怎么做呢?

我想看到它在Xcode或终端,但这不是一个问题,如果我需要使用另一个软件。

180749 次浏览

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


老方法:

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

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

然后运行模拟器。

编辑:

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

您可以使用控制台。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

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

当模拟器正在运行并且有一个网页打开时,在桌面safari的开发菜单下会有一个选项,让你看到iOS模拟器控制台:

开发-> iPhone模拟器-> 网站的名字

跟踪/var/log/system.log对我没用。我通过使用Console.app找到我的日志。他们在

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

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

Debug > Open System Log

或使用

keyboard shortcut: ⌘/

模拟器菜单截图

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

如果你正在使用斯威夫特,请记住println只会打印到调试日志(出现在xCode的调试区域)。如果你想打印到system.log,你必须像以前一样使用NSLog

然后您可以通过它的菜单查看模拟器日志,调试>打开系统日志…cmd + /

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

我可以直接通过iOS模拟器打开日志:Debug -> Open System Log...不确定这是什么时候引入的,所以它可能不适用于早期版本。

你不应该依赖instruments -s。官方支持的从命令行使用模拟器的工具是xcrun simctl

设备的日志目录可以通过xcrun simctl getenv booted SIMULATOR_LOG_ROOT找到。即使位置改变,这也总是正确的。

现在事情已经转移到os_log,打开Console就更容易了。启动后的模拟器和物理设备一样,在左侧显示为日志源。你也可以在启动模拟器中运行日志命令:

# 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,你应该在菜单中看到模拟器。

您可以通过将URL从Safari地址栏拖拽到模拟器窗口中来打开模拟器中的URL。你也可以使用xcrun simctl openurl booted <url>

[iOS Logger]

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

也请检查(动作>包括& lt;信息/ Debug>消息)

enter image description here

请注意,如果你想查看来自WebView(UIWebViewWKWebView)的日志,你应该使用Safary -> Develop -> device

[查找崩溃日志]

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

Web开发工具

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

我想出了一个方法,把日志写进一个文件,用Terminal.app打开xx.log。然后日志将生动地呈现在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:

DDLogXXX替换printNSLog

步骤3:

$ tail -f {path of log}

此时,消息将显示在终端中。应用活泼。

还有一件事。如果没有任何消息注销,确保Environment Variables -> OS_ACTIVITY_MODE未禁用。

下载safari技术评论。在模拟器运行时,选择develop >模拟器比;本地主机

在Xcode < p >: 查看->调试区域->激活控制台

enter image description here

查看控制台日志最简单的方法是添加consolelogs作为参数:

ionic cordova run ios -l --consolelogs

您将能够在终端上看到控制台日志。