iOS 10无法打印NSLog

时间:2016-06-17 16:49:57

标签: ios xcode nslog xcode8 ios10

Xcode 8.0 beta(8S128d)上的NSLog无法打印。 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 Simulator上的输出:

hello from printf

9 个答案:

答案 0 :(得分:226)

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

在Xcode 8中:

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

仅添加OS_ACTIVITY_MODE并进行检查(不添加值)

enter image description here

enter image description here

要点: 这是Xcode 8 + iOS10的一个错误,我们可以用这种方式解决它:

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

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

答案 1 :(得分:27)

如果您查看Xcode 8 beta release notes,则会发现它显示:

  

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

答案 2 :(得分:17)

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

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

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

点击关闭

<强> xcode9

添加&#34; OS_ACTIVITY_MODE&#34;并将值设置为&#34;默认&#34;并检查它。

enter image description here enter image description here

答案 3 :(得分:7)

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

(我正在使用Xcode 7,所以它可能不是Xcode的问题,但iOS 10问题)

答案 4 :(得分:6)

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

enter image description here

答案 5 :(得分:5)

嗯...好像属性&#34; OS_ACTIVITY_MODE&#34;:&#34;禁用&#34;防止NSlog显示在Xcode 9日志中。

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

对于将来遇到这种情况的任何人。 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/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

可以找到虚拟机的diagnostics

uuidtextfoldername.xarchive内的所有项目复制到一个文件夹中(不要包含文件夹诊断或uuidtext内容)。

重命名该文件夹log

在Console.app中打开它或使用OSX工具log show <path to archive> --info --predicate <options>echo "<pre>";print_r($_REQUEST); Array ( [tx] => 3RA54961H14867235 [st] => Completed [amt] => 29.00 [cc] => USD [cm] => [item_number] => [sig] => scLH/oMz+Q0+arHSabEPju068IFOcpsnu5Mb77AkvDJ0S9LO0ZOjvLx68ojre4Y2ZWFB/dWNz3RtzCzwiY5p5zI8uRhbPoBZRwlIOTU8XRqif9Ni2g/E/Wc4LL6gs0fpo618MN4pFnbina2sYi6fyzhOQoS5se+4vBywzhG0X0E= )

答案 8 :(得分:0)

升级到Xcode 9.1 + iOS 11.1时,

NSLog消息不再显示。最初,accepted answer为我提供了一种方法,可以使用控制台应用程序并启用模拟器(see Lucas' answer)来解决此问题。

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

我意识到必须有一种更直接的方式来disable或启用(即defaultNSLogs,这要归功于Coeur的回复this answer.的评论在我看来,这是最佳答案,因为将OS_ACTIVITY_MODE设置为disabledefault对初学者更有意义。