从xcrun xctrace列表设备获取输出

问题描述

在詹金斯管道上,我执行:

@H_404_2@def devicesText = sh(script: "xcrun xctrace list devices",returnStdout: true) printf devicesText

具有奇怪的行为,因为它在控制台上打印输出,但不将输出保存在变量中。控制台看起来像这样(ID已被XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX取代):

@H_404_2@+ xcrun xctrace list devices == Devices == SAM Team - Build Server 2018 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) == Simulators == Apple Watch Series 5 - 40mm (7.0) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) Apple Watch Series 5 - 44mm (7.0) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPad (7th generation) (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPad Air (3rd generation) (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPad Pro (11-inch) (2nd generation) (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPad Pro (12.9-inch) (4th generation) (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPad Pro (9.7-inch) (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPhone 11 (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPhone 11 Pro (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPhone 11 Pro Max (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPhone 6s (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPhone 8 (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPhone 8 Plus (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) iPhone SE (2nd generation) (13.5) (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) [Pipeline] echo

您可以看到回显为空,因为未将其复制到变量中。如何将输出保存到变量中?

(它曾经使用过时的命令instruments -s devices

解决方法

不知何故,xcrun xctrace 将输出打印到 stderr

因此,为了在 stderr 中获取 stdout 日志,只需使用 stdout 将它们重定向到 2>&1

-> xcrun xctrace list devices 2>&1 | grep -oE 'iPhone.*?[^\(]+' | head -1 | awk '{$1=$1;print}'

,

我在GitHub Actions中的xcodebuild中遇到了类似的问题。我的解决方法是找到带有xcrun xctrace列表设备的设备,然后直接在构建命令中使用它,例如:-destination“ platform = $ platform,name = iPhone 8”。

我尝试使用与iPhone *匹配的默认regEx和grep 1行,但是它对我没有用。