从xcrun xctrace列表设备获取输出



在jenkins管道上,我执行:

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

它具有奇怪的行为,因为它在控制台上打印输出,但不将输出保存在变量中。控制台如下(ID已被XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX替换(:

+ 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

正如您所看到的,echo是空的,因为它没有被复制到变量中。如何将输出保存在变量中?

(它曾经使用不推荐使用的命令instruments -s devices(

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

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

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

我在使用GitHub Actions的xcodebuild中遇到了类似的问题。我的工作是找到一个带有xcrun xctrace列表设备的设备,并直接在build命令ex:-destination中使用它;platform=$platform,name=iPhone 8";。

我试着使用默认的regEx和grep 1行匹配的iPhone*,但它从来没有对我起作用。

最新更新