使用 xcodebuild 的测试 运行 在终端中没有 NSLog 输出
No NSLog output in terminal from tests run with xcodebuild
我正在尝试在 ios 上实施 CI。我正在 运行 xcode 命令行单元测试使用 xcodebuild on a real device (iPad):
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 的终端 window 中:
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 的 Window->Devices and Simulators-> View Device Logs
的设备日志,看起来它们在那里,但作为通知(也许它们是通知的事实很重要):
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 并且它的效果很奇怪。 machine 的配置如下:
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 的其他配置如下:
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)。
确实对于 iOS 版本 10+,看起来 NSLog 被视为 < Notice > 消息并且不包含在 xcodebuild 输出的 stdout 或 stderr 中。我通过查看设备控制台日志发现了这一点。
我找到了 devliubo 刚才提到的解决方案,但我不确定这是否是一个常见问题(感谢 devliubo)。
使用 printf 而不是 NSLog 是为这种特殊情况打印消息的唯一方法。
就像 Dan 所说的那样,如果您想在控制台上看到测试中的消息,您最好使用 printf
而不是 NSLog
示例printf("%s", [yourNSString UTF8String]);
我正在尝试在 ios 上实施 CI。我正在 运行 xcode 命令行单元测试使用 xcodebuild on a real device (iPad):
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 的终端 window 中:
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 的 Window->Devices and Simulators-> View Device Logs
的设备日志,看起来它们在那里,但作为通知(也许它们是通知的事实很重要):
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 并且它的效果很奇怪。 machine 的配置如下:
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 的其他配置如下:
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)。
确实对于 iOS 版本 10+,看起来 NSLog 被视为 < Notice > 消息并且不包含在 xcodebuild 输出的 stdout 或 stderr 中。我通过查看设备控制台日志发现了这一点。 我找到了 devliubo 刚才提到的解决方案,但我不确定这是否是一个常见问题(感谢 devliubo)。 使用 printf 而不是 NSLog 是为这种特殊情况打印消息的唯一方法。
就像 Dan 所说的那样,如果您想在控制台上看到测试中的消息,您最好使用 printf
而不是 NSLog
示例printf("%s", [yourNSString UTF8String]);