通过xcodebuild运行的测试在终端没有NSLog输出

4

我正在尝试在iOS上实现CI。我正在使用xcodebuild在真实设备(iPad)上从命令行运行Xcode单元测试:

xcodebuild test -project MyProject.xcodeproj -scheme tests DEVELOPMENT_TEAM={DEV_TEAM_ID} -destination platform=iOS,id={DEVICE_UUID} build-for-testing -allowProvisioningUpdates -configuration {Debug/Release}

我有一个包含NSLog调用的单元测试。问题是这些日志没有在调用xcodebuild的终端窗口中显示:

Test Suite 'Selected tests' started at 2018-06-07 05:10:45.653
Test Suite 'XcodeTests.xctest' started at 2018-06-07 05:10:45.655
Test Suite 'XcodeTests.xctest' failed at 2018-06-07 05:10:45.655.
        Executed 1 test, with 1 failure (0 unexpected) in 0.000 (0.00) seconds
Test Suite 'Selected tests' failed at 2018-06-07 05:10:45.656.
        Executed 1 test, with 1 failure (0 unexpected in 0.00 (0.003) seconds

我查看了Xcode的窗口->设备和模拟器->查看设备日志中的设备日志,似乎它们在那里,但是被标记为“注意”(也许“注意”这个事实很重要):

Jun  7 05:10:45 MyiPad tests(XcodeTests)[21982] <Notice>: ENTERED TEST
Jun  7 05:10:45 MyiPad tests[21982] <Notice>: CREATED EXPECTATIONS

我曾在另一台Mac电脑上测试过这种启动方法,并连接了另一个iPad,结果很奇怪,它却可以正常工作。这台电脑的配置是为了在终端上显示NSLog消息而进行的如下设置:

 System Software Overview:

 System Version: macOS 10.13.2 (17C88)
 Kernel Version: Darwin 17.3.0
 Boot Volume: SYSTEM
 Boot Mode: Normal
 Computer Name: Mac001
 User Name: MacUser001
 Secure Virtual Memory: Enabled
 System Integrity Protection: Enabled
 Time since boot: 7 days 48 minutes

 XCODE VERSION DETAILS: 
 Xcode 9.2
 Build version 9C40b

 Device iOS Version: 11.2 (15C114)

另一种情况是在以下配置下无法在终端中显示NSLogs:

其他配置下,终端中不会显示NSLogs的情况如下:

System Software Overview:

System Version: macOS 10.13.3 (17D47)
Kernel Version: Darwin 17.4.0
Boot Volume: SYSTEM
Boot Mode: Normal
Computer Name: Mac002
User Name: MacUser002
Secure Virtual Memory: Enabled
System Integrity Protection: Enabled
Time since boot: 7 days 48 minutes

XCODE VERSION DETAILS: 
Xcode 9.2
Build version 9C40b

Device iOS Version: 10.2 (14C92)

可能出现了什么问题?是设备还是Mac工作站的问题?(我没有物理接触它们,只能远程连接到Mac)。


1
我遇到了同样的问题。最终我使用了printf而不是NSLog。printf对我很有效。 - devliubo
2个回答

0

对于iOS版本10+,NSLog似乎被视为<Notice>消息,并且不包含在xcodebuild输出的stdout或stderr中。我通过查看设备控制台日志发现了这一点。 我找到了devliubo之前提到的解决方案,但我不确定这是否是一个常见问题(感谢devliubo)。 在这种特殊情况下,使用printf而不是NSLog是打印消息的唯一方法。


0

就像丹所说,如果你想在控制台上看到测试信息被打印出来,最好使用 printf 而不是 NSLog

例如 printf("%s", [yourNSString UTF8String]);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接