iOS 10不打印NSLogs


88

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

这是我的代码:

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

这是iOS 9 Simulator上的输出:

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

这是iOS 10 Simulator的输出:

hello from printf

我有一个类似的问题。但是在iOS 8.1中,使用Xcode8。我在这里检查了每个答案。原来我做的一切正确。没有任何帮助。因此,我关闭了设备并打开了电源。有用。我在这里写下此评论是为了帮助其他面临类似问题的人
KrishnaCA

Answers:


229

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

在Xcode 8中:

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

只添加OS_ACTIVITY_MODE并检查(不添加值)

在此处输入图片说明

在此处输入图片说明

简介:这是Xcode 8 + iOS10的错误,我们可以通过以下方式解决它:

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

  • 在真实设备上时,仅添加“ OS_ACTIVITY_MODE”并进行检查(不添加值)。您将在Xcode8控制台中看到NSLog。


4
>“不添加值”我将其设置为“禁用”,并且可以使用!空字段对我不起作用。
m8labs

您确定它可以在实际的iPhone设备调试中正常运行,而不在模拟器中运行吗?如果将其设置为“禁用”,则在进行真正的iPhone调试时,控制台将无法NSLog。
user6833743

我已经检查了一下,没有“禁用”,它现在可以在设备上运行,但是在模拟器上坏了,现在又可以显示所有内容……
m8labs

2
无论如何有自动化的过程吗?这真的很烦人,我们必须记住像这样来回走动:/
温室

2
此解决方案将隐藏所有以Xcode 9开头的NSLog。要保留NSLog,请替换disabledefault
心教堂

27

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

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


9
我也无法在真实的iOS 10设备中看到NSLog输出。如果您使用的是真实设备,则可以打开“设备”窗口(Shift + Command + 2)并在那里查看设备日志,但是很难查看调试应用程序日志,因为控制台会显示系统和应用程序中的所有日志。
kientux

19

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

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

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

点击关闭

xcode9

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

在此处输入图片说明 在此处输入图片说明


这对我不起作用。对于已部署的应用程序,不会显示NSLogs。我将xcode 8.1(在Mac 10.11上运行)与iOS 10设备一起使用。
mobjug

21
此解决方案将隐藏所有以Xcode 9开头的NSLog。要保留NSLog,请替换disabledefault
心教堂

3
这个答案应该被更新,以占@心教堂的修正Xcode的9
乔尔

7

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

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


我在iOS 10 GM下的设备窗口中没有看到我的应用程序的NSLogs ...您是否遇到相同的问题?
塔霍金刚狼

我可以在带有iOS 10 GM的Xcode 7中看到日志,不再需要打开设备窗口。
kientux

2
我不是在谈论从Xcode运行,而是在谈论从已部署的应用程序打印的日志。
塔霍金刚狼16/09/13

有什么进展吗?
jhurray

部署的应用程序中的iOS 10设备日志中省略了NSLogs和printf。您可以添加全局宏以直接调用替换它os_log
Elist,2016年

7

另外,请确保控制台实际上在Xcode中可见(即,确保右侧图标以蓝色突出显示,如下图所示)。升级Xcode后,它会隐藏控制台并仅向我显示“变量”视图。这使它看起来好像NSLog()工作不正常,而实际上却工作正常,我只是看不到输出。

在此处输入图片说明


也可以使用Shift + ⌘ + CXcode版本8.3.3
DJ2

5

嗯...似乎属性“ OS_ACTIVITY_MODE”:“禁用”防止在Xcode 9日志中显示NSlog。

在我的方案中取消选中此值将还原我的日志。


5

对于将来遇到这种情况的任何人。在Apple 10和iOS 11中,NSLog无法打印到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/

复制其中的所有项目,diagnostics然后uuidtext到一个文件夹(不包括文件夹诊断或uuidtext只是里面是什么)。

重命名该文件夹 foldername.xarchive

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


那么在iOS上呢?
kakyo

1

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


1
我在使用Xcode 9时遇到了一些问题。我插入了参数:OS_ACTIVITY_MODE,但似乎不起作用...
Alessio Campanelli

4
此解决方案将隐藏所有以Xcode 9开头的NSLog。要保留NSLog,请替换disabledefault
心教堂

我认为这是正确的答案。OS_ACTIVITY_MODEdisable或者default是直接
格雷格-

1

NSLog升级到Xcode 9.1 + iOS 11.1时不再显示消息。最初,接受的答案为我提供了一种方法,可以使用控制台应用程序并启用模拟器来解决此问题(请参阅Lucas的答案)。

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

我意识到必须有一种更直接的方法来disable启用(即启用default),NSLogs这要归功于Coeur对这个答案的评论我认为这是最好的答案,因为设置OS_ACTIVITY_MODEdisabledefault对初学者更有意义。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.