90

NSLogXcode 8.0 beta (8S128d) 上没有打印任何内容。printf不变

这是我的代码:

NSLog(@"hello from NSLog");
printf("hello from printf");

这是 iOS 9 模拟器上的输出:

2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf

这是 iOS 10 模拟器上的输出:

hello from printf
4

9 回答 9

231

可能是您在 Scheme 环境变量中添加了属性“OS_ACTIVITY_MODE”:“disable”(以隐藏模拟器的操作系统输出)并忘记了它,现在正在真实设备上运行。

在 Xcode 8 中:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

只加OS_ACTIVITY_MODE检查(不要加值)</p>

在此处输入图像描述

在此处输入图像描述

总结:这是Xcode 8 + iOS10的一个bug,我们可以这样解决:

  • 使用模拟器时,添加名称“OS_ACTIVITY_MODE”和值“禁用”并检查它。

  • 在真机上,只添加“OS_ACTIVITY_MODE”并勾选(不要添加Value)。您将在 Xcode8 控制台中看到 NSLog。

于 2016-09-15T05:19:37.287 回答
27

如果您查看Xcode 8 beta 发行说明,您会发现它说:

调试在模拟器上运行的应用程序时,控制台中可能看不到日志。解决方法:使用 Simulator.app 中的命令 + / 在 Console 应用中打开系统日志以查看 NSLog。(26457535)

于 2016-06-17T18:36:14.263 回答
19

NSlog 或打印实际上已执行,但隐藏在许多其他控制台调试输出中以解决此问题打开 Xcode8:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

添加“OS_ACTIVITY_MODE”并将值设置为“禁用”并检查它。

点击关闭

xcode9

添加“OS_ACTIVITY_MODE”并将值设置为“默认”并检查它。

在此处输入图像描述 在此处输入图像描述

于 2016-09-15T20:06:34.080 回答
8

此外,确保控制台在 Xcode 中确实可见(即,确保右侧图标以蓝色突出显示,如下图所示)。升级 Xcode 后,它隐藏了控制台,只显示了变量视图。这使它看起来NSLog()工作不正常,而它确实工作正常,我只是看不到输出。

在此处输入图像描述

于 2017-04-20T02:39:41.070 回答
7

对于将来遇到此问题的任何人。NSLog 在 iOS 10 和 iOS 11 中不打印到 syslog 的原因是 Apple 更改为统一日志记录。

你可以在这里看到 WWDC 的讨论:https ://developer.apple.com/videos/play/wwdc2016/721/

此处的文档:https ://developer.apple.com/documentation/os/logging

从 10 开始,您应该使用 os_log 而不是 NSLog。

如何找到磁盘上的日志:https ://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/

总而言之,日志位于/var/db/diagnostics可以在以下位置找到 VM的日志/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

将所有项目复制到单个文件夹中(不包括文件夹诊断或 uuidtext 只是里面的内容)diagnosticsuuidtext

重命名该文件夹foldername.xarchive

在 Console.app 中打开它或使用 OSX util loglog show <path to archive> --info --predicate <options>

于 2018-03-03T06:47:04.683 回答
7

我也看不到真正的 iOS 10 设备中的 NSLog 输出。如果您使用的是真实设备,您可以从 Xcode (Shift + Command + 2) 打开设备窗口并在那里查看设备日志,但很难查看应用程序的日志,因为控制台显示来自系统和所有应用程序的日志。

(我使用的是 Xcode 7,所以可能不是 Xcode 的问题,而是 iOS 10 的问题)

于 2016-06-23T01:17:51.170 回答
6

嗯...似乎属性 "OS_ACTIVITY_MODE": "disable" 阻止 NSlog 出现在 Xcode 9 日志中。

在我的方案中取消选中此值恢复了我的日志。

于 2017-10-03T19:19:13.817 回答
1

我正在使用 Xcode 8,所以我也遇到了同样的问题。我通过value = disable在模拟器上添加解决了这个问题,但是在真机上我没有增加价值。

于 2016-09-23T06:01:19.173 回答
1

NSLog当我升级到 Xcode 9.1 + iOS 11.1 时不再显示消息。最初,接受的答案给了我一种使用控制台应用程序和启用模拟器来解决这个问题的方法(参见 Lucas 的答案)。

Action我尝试选择Include Debug Messages和取消选择的控制台应用程序Include Info Messages中(因此控制台不会被系统消息淹没)。NSLog消息出现在 Xcode 的控制台窗口中,但不在控制台应用程序中。

我意识到必须有一种更直接的方式来实现disable或启用(即defaultNSLogs,这要感谢 Coeur 对这个答案的评论。在我看来,这是最好的答案,因为设置OS_ACTIVITY_MODEdisableordefault对初学者来说更有意义。

于 2017-11-05T04:00:12.833 回答