Ios Travis CI,使用Xcode时不会进一步传递Xcode-exit命令

Ios Travis CI,使用Xcode时不会进一步传递Xcode-exit命令,ios,xcode,continuous-integration,travis-ci,xcodebuild,Ios,Xcode,Continuous Integration,Travis Ci,Xcodebuild,这是我的travis.yml文件: osx_image: xcode10.2 language: objective-c before_install: - travis_wait 35; cd CalendarKitDemo; pod update script: - xcodebuild build -workspace CalendarKitDemo.xcworkspace -scheme "CalendarKitDemo" -sdk iphonesimulator | xcprett

这是我的
travis.yml
文件:

osx_image: xcode10.2
language: objective-c

before_install:
- travis_wait 35; cd CalendarKitDemo; pod update

script:
- xcodebuild build -workspace CalendarKitDemo.xcworkspace -scheme "CalendarKitDemo" -sdk iphonesimulator | xcpretty

notifications:
  email: false
问题是,即使实际的
xcodebuild
命令失败退出,生成始终标记为“成功”,例如:

当我删除
xcpretty
时,作业会正确地通过失败/成功,如


如何在作业成功/失败时使用xcpretty并将正确的值传递给Travis CI?

您的问题是bash默认使用xcpretty中最后一个命令中的exist代码。因此,您可以从xcpretty获得exist代码

您可以在您的环境中设置pipefail(set-o pipefail)

pipefail
将导致脚本以第一个非零退出代码退出

例如,在你的Travis文件中

script:
- set -o pipefail
- xcodebuild build -workspace CalendarKitDemo.xcworkspace -scheme "CalendarKitDemo" -sdk iphonesimulator | xcpretty
如果希望更明确,还可以从第一个命令(xcodebuild)获取exitcode,bash在
PIPESTATUS
数组中公开管道的出口代码

例如


-xcodebuild build-workspace CalendarKitDemo.xcworkspace-scheme“CalendarKitDemo”-sdk iphonesimulator | xcprety&&exit${PIPESTATUS[0]}

能否请您提供带有“pipefail”的示例“?@RichardTopchiy如果我的回答有用,你介意接受它作为正确的答案吗?谢谢你的回答,效果很好,很抱歉回复太晚!