如何过滤xcodebuild命令行输出?

时间:2010-02-11 13:18:39

标签: xcode build-process console build-automation xcodebuild

从控制台运行xcodebuild将为您带来非常详细的输出,但我无法找到任何限制其输出的选项,以便仅显示警告和错误。

我正在寻找一种捕获xcodebuild输出并过滤它的方法。它更喜欢可以使用管道的Python解决方案,但只要它们是基于命令行的解决方案,我就可以使用其他方法。

是否有任何工具可以执行此操作?

10 个答案:

答案 0 :(得分:52)

使用xcodebuild -quiet

根据xcodebuild手册页:

  

-quiet:除警告和错误外,不要打印任何输出。

额外奖励:无需其他工具! (虽然我也喜欢xcodebuild | xcpretty

我使用Travis CI构建,它在4 MB日志后抱怨。这个论点解决了这个问题。

答案 1 :(得分:39)

有一个叫做xcpretty的Ruby宝石。

它过滤xcodebuild的输出,并提供不同的格式化和着色。

答案 2 :(得分:35)

这对我来说还不够。管道到/ dev / null只会向您显示构建失败,但您没有看到原因。理想情况下,如果没有所有成功的编译器命令,我们只能看到错误和/或警告。

这基本上可以完成这项工作:

xcodebuild | grep -A 5 error:

答案 3 :(得分:18)

要仅查看错误输出消息,请将标准输出重定向到/ dev / null(一个用作黑洞的特殊文件),如下所示:

xcodebuild > /dev/null

如果要将错误输出捕获到文件中,可以执行以下操作:

xcodebuild 2> ./build_errors.log

答案 4 :(得分:5)

enter image description here

-quiet是目前最好的方式。

答案 5 :(得分:0)

我喜欢xcpretty看待人类,但我需要在自动设置中找到构建错误以便在其他地方传播,我想确保我只捕获了相关信息。以下sed命令用于此目的:

xcodebuild | sed -nE '/error:/,/^[[:digit:]] errors? generated/ p'

输出:

main.c:16:5: error: use of undeclared identifier 'x'
    x = 5;
    ^
main.c:17:5: error: use of undeclared identifier 'y'
    y = 3;
    ^
2 errors generated.

答案 6 :(得分:0)

有一个Swift命令行工具https://github.com/thii/xcbeautify,它也可以格式化xcodebuild输出。

答案 7 :(得分:0)

我正在构建一个Expo项目,并且有很多我不希望看到的来自库的警告。我可以使用此命令过滤警告。

set -o pipefail \
&& xcodebuild build -workspace app.xcworkspace -scheme app \
CODE_SIGN_IDENTITY="" \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO \
| xcpretty \
| grep --line-buffered -v -F "[-W" \
| grep --line-buffered -v -F "*" \
| grep --line-buffered -v -F "^" \
| grep --line-buffered -v -F ";" \
| grep --line-buffered -v -e "^$" \
| grep --line-buffered -v -F "@" \
| grep --line-buffered -v -F ")" \
| grep --line-buffered -v -F "/" \
| grep --line-buffered -v -F "}" \
| grep --line-buffered -v -F "{" \
| grep --line-buffered -v -F "\\" \
| grep --line-buffered -v -F "#" \
| grep --line-buffered -v -F ","

我承认这有点草率,但是我无法使用其他任何解决方案。 -quiet选项仍然打印出数百个我无法解决的警告。

奇怪的是,当我在构建计算机上的命令行上进行编译时,没有收到警告,但是在CI构建中进行编译时,却收到了警告。很烦人。我希望苹果能够提供一种使xcodebuild的警告静音的方法

答案 8 :(得分:0)

xcpretty 在 CI 环境中吞下了太多信息,这让我很难调试错误。 -quiet 以一种过于激进的方式隐藏输出,因此我将这个单行代码放在一起并命名为 xcquiet.sh。它只隐藏特定的行,同时保留足够的原始输出并且不会吞下任何其他意外的日志条目。

答案 9 :(得分:0)

我们运行 detox build 命令,它在 CI 中抛出了太多日志。 -quite 参数因隐藏日志而失败。

最好的解决办法是在文件中隐藏和保存日志:

npx detox build -c ios &> detox_build.log