Answers:
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
console.log
使用tail
或Console.app
您可以通过桌面Safari查看iOS模拟器的控制台。这类似于您使用桌面Safari查看物理iOS设备的控制台的方式。
每当模拟器运行且打开网页时,桌面浏览器中的“开发”菜单下都会有一个选项,可让您查看iOS模拟器控制台:
开发-> iPhone模拟器-> 网站名称
在iOS 8和iOS 9下,此位置现在为:
~/Library/Logs/CoreSimulator/<DEVICE_CODE>
因此,以下将起作用:
tail -f ~/Library/Logs/CoreSimulator/<DEVICE_CODE>/system.log
DEVICE_CODE
可以通过以下控制台命令找到该值:
instruments -s devices
instruments -s devices
在控制台中输入
你不应该依靠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> 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
否NSLog
或print
内容将写入system.log
,可以通过Simulator -> Debug -> Open System log
Xcode 11上的Select打开。
我想出一个办法,写日志到一个文件并打开xx.log
用Terminal.app
。那么日志将呈现Terminal.app
热闹。
我使用CocoaLumberjack实现此目的。
添加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
}
更换print
或NSLog
使用DDLogXXX
。
$ tail -f {path of log}
在这里,消息将实时显示在Terminal.app中。
还有一件事。如果没有任何消息注销,请确保
Environment Variables
->OS_ACTIVITY_MODE
ISNOT disable。