【问题标题】:How can I get the console logs from the iOS Simulator?如何从 iOS 模拟器获取控制台日志?
【发布时间】:2012-04-27 06:46:17
【问题描述】:

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

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

我该怎么做?

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

【问题讨论】:

标签: ios console ios-simulator


【解决方案1】:

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

【讨论】:

  • 这仍然准确吗?我在使用tailConsole.app 的这些日志中没有看到来自console.log 的任何内容
  • iOS 模拟器 > 菜单栏 > 调试 > 打开系统日志
  • 谢谢!它的 ~/Library/Logs/CoreSimulator//system.log 这些天。
  • BYossarian 的答案是“正确的”。 “桌面 safari 中的开发菜单,可让您查看 iOS 模拟器控制台:开发 -> iPhone 模拟器 -> 站点名称”
  • 如果您不确定要使用什么<simulator-hash>(我是),您也可以简单地执行以下操作:tail -f ~/Library/Logs/CoreSimulator/*/system.log 这将呈现所有内容,但仅继续跟踪更新的内容(很可能是正在运行的)
【解决方案2】:

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

只要模拟器运行并打开网页,桌面 safari 的“开发”菜单下就会有一个选项,让您可以看到 iOS 模拟器控制台:

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

【讨论】:

  • 请注意,您需要一台运行 iOS >= 6 的设备或模拟器。您还可能需要在 iOS 上启用 Web Inspector 支持(设置应用程序 > Safari > 高级)。
  • 看起来现在只是:开发>模拟器>(你的模拟器名称)
  • 我必须先打开模拟器,然后重新启动 Safari 才能获得此答案描述的选项。但后来它就像一个魅力。
  • 这是唯一对我有用的。您还必须首先启用该开发菜单:Preferences > Advanced > [Check] Show Develop menu in menu bar.
【解决方案3】:

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

Debug > Open System Log

或使用

keyboard shortcut: ⌘/

【讨论】:

    【解决方案4】:

    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
    

    【讨论】:

    • 要查找设备标识符:在 Xcode 中,单击 Windows > 设备。设备和标识符将显示在右侧窗格中。
    • 您可以在控制台输入instruments -s devices
    • s/控制台/终端窗口/
    • 这对我不起作用。 xcrun simctl spawn booted log stream --level=debug | grep App_Debug_String 工作。
    【解决方案5】:

    您不应依赖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 &lt;url&gt;

    【讨论】:

    • 这是现在 Xcode 9.3,iOS 11 的正确答案。其他答案中提到的位置不再正确。
    • 这适用于 Xcode 版本 10.1 (10B61)、iOS 12.1 模拟器。使用它在 Emacs 中查看 iOS 应用程序控制台输出。其他答案过去有效,但不再有效。
    • 对我来说,最重要的是订单(我在模拟器之前打开了 Safari,因此菜单项没有出现在 Safari 中)!
    • 您在哪里找到“谓词”标志的文档?
    • macOS 11 和 iOS 14 模拟器新手:log help predicates 将为您提供更多信息。谓词格式遵循 NSPredicate。
    【解决方案6】:

    如果您使用 Swift,请记住 println 只会打印到调试日志(出现在 xCode 的调试区域中)。如果你想打印到 system.log,你必须像过去一样使用NSLog

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

    【讨论】:

      【解决方案7】:

      [iOS Logger]

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

      另外请检查(Action -> Include Messages)

      请注意,如果您想查看来自WebViewUIWebViewWKWebView)的日志,您应该使用Safary -&gt; Develop -&gt; device

      [Find crash log]

      【讨论】:

      • cmdthenspace bar 键入“Console”按enter。顺便提一句。这应该是今天的正确答案。
      【解决方案8】:

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

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

      【讨论】:

      • 这是查看日志的好方法,例如几天前。
      【解决方案9】:

      XCode > 6.0 和 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

      【讨论】:

        【解决方案10】:

        在 Xcode 中: 查看->调试区->激活控制台

        【讨论】:

          【解决方案11】:

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

          【讨论】:

            【解决方案12】:

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

            【讨论】:

              【解决方案13】:

              没有NSLogprint 内容将写入system.log,可以在Xcode 11 上通过选择Simulator -&gt; Debug -&gt; Open System log 打开。

              我想了个办法,把日志写到一个文件里,用Terminal.app打开xx.log。然后日志就会在Terminal.app里活生生的呈现出来。

              我使用CocoaLumberjack 来实现这一点。

              第 1 步:

              添加DDFileLoggerDDOSLogger并打印日志路径。 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_MODE ISNOT 禁用。

              【讨论】:

                【解决方案14】:

                下载 Safari 技术评论。在模拟器运行的情况下,选择开发 > 模拟器 > 本地主机

                【讨论】:

                  【解决方案15】:

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

                  ionic cordova run ios -l --consolelogs

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2013-09-16
                    • 1970-01-01
                    • 2016-02-09
                    • 1970-01-01
                    • 2013-08-18
                    • 2016-09-15
                    • 1970-01-01
                    相关资源
                    最近更新 更多