从控制台运行xcodebuild
将为您带来非常详细的输出,但我无法找到任何限制其输出的选项,以便仅显示警告和错误。
我正在寻找一种捕获xcodebuild
输出并过滤它的方法。它更喜欢可以使用管道的Python解决方案,但只要它们是基于命令行的解决方案,我就可以使用其他方法。
是否有任何工具可以执行此操作?
答案 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)
答案 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