如果我不在 Xcode 中测试应用程序,我想看看 iOS 模拟器中会发生什么。
例如,如果我在 Safari 模拟器中打开一个链接,请查看控制台中发生的情况,或者如果我安装了一个 Web 应用程序,请查看我在控制台中按下的链接。
我怎样才能做到这一点?
我想在 Xcode 或终端中看到它,但如果我需要使用其他软件,这不是问题。
iOS 模拟器 > 菜单栏 > 调试 > 打开系统日志
老办法:
iOS Simulator 将其日志直接打印到标准输出,因此您可以看到日志与系统日志混合在一起。
打开终端并输入: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
您可以通过桌面 Safari 查看 iOS 模拟器的控制台。它类似于您使用桌面 Safari 查看物理 iOS 设备控制台的方式。
每当模拟器运行并打开网页时,桌面 safari 的“开发”菜单下都会有一个选项,可让您看到 iOS 模拟器控制台:
开发 -> iPhone 模拟器 -> 站点名称
模拟器中有一个选项可以打开 console
Debug > Open System Log
或使用
keyboard shortcut: ⌘/
https://i.stack.imgur.com/PWZI3.png
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
instruments -s devices
xcrun simctl spawn booted log stream --level=debug | grep App_Debug_String
工作。
instruments
命令未找到。 instruments
在哪里?
您不应依赖 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,您应该会在菜单中看到模拟器。
您可以在模拟器中打开一个 URL,方法是将其从 Safari 地址栏中拖放到模拟器窗口中。您也可以使用 xcrun simctl openurl booted <url>
。
log help predicates
将为您提供更多信息。谓词格式遵循 NSPredicate。
您可以使用 Mac 上的 Console
应用程序(在设备中选择您的设备)查看使用 NSLog
、os_log
、Logger
发送的日志消息(您不会看到来自 print
函数的日志) .
另请检查(操作 -> 包含
https://i.stack.imgur.com/aJOwk.jpg
请注意,如果您想查看来自 WebView
(UIWebView
或 WKWebView
)的日志,您应该使用 Safary -> Develop -> device
cmd
then
space bar
键入“Console
”按 enter
。顺便提一句。这应该是今天的正确答案。
如果您使用 Swift,请记住 println
只会打印到调试日志(出现在 xCode 的调试区域中)。如果要打印到 system.log,则必须像过去一样使用 NSLog
。
然后你可以通过它的菜单查看模拟器日志,Debug > Open System Log... (cmd + /)
拖尾 /var/log/system.log
对我不起作用。我使用 Console.app
找到了我的日志。他们在
~/Library/Logs/iOS Simulator/{version}/system.log
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 Simulator)”替换为 $1
您可以使用 Safari Technology Preview 应用程序查看 Simulator 控制台窗口,包括 Safari Web Inspector 和所有 Web 开发工具。在模拟器上的 Safari 中打开您的页面,然后转到 Safari Technology Preview > Develop > Simulator。
https://i.stack.imgur.com/nFim3.png
在 Xcode 中:查看->调试区域->激活控制台
https://i.stack.imgur.com/KmwTf.png
我可以直接通过 iOS 模拟器打开日志:Debug -> Open System Log...
不确定何时引入,因此可能不适用于早期版本。
没有 NSLog
或 print
内容将写入 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步:
将 print
或 NSLog
替换为 DDLogXXX
。
第 3 步:
$ tail -f {path of log}
在这里,消息将生动地呈现在 Terminal.app 中。
还有一件事。如果没有任何消息注销,请确保环境变量 -> OS_ACTIVITY_MODE ISNOT 禁用。
下载 Safari 技术评论。在模拟器运行的情况下,选择开发 > 模拟器 > localhost
查看控制台日志的最简单方法是将 consolelogs
添加为参数:
ionic cordova run ios -l --consolelogs
您将能够在终端中看到控制台日志。
不定期副业成功案例分享
tail
或Console.app
的这些日志中没有看到来自console.log
的任何内容<simulator-hash>
(我是),您也可以简单地执行以下操作:tail -f ~/Library/Logs/CoreSimulator/*/system.log
这将呈现所有内容,但只跟踪更新的那个(很可能是正在运行的那个)