从控制台运行xcodebuild
会给你带来非常详细的输出,我无法找到任何限制其输出的选项,以便只显示警告和错误。
我正在寻找一种捕获xcodebuild
输出并对其进行过滤的方法。它更喜欢可以与管道一起使用的 Python 解决方案,但我对其他方法持开放态度,只要它们是基于命令行的解决方案。
是否有任何工具已经能够做到这一点?
从控制台运行xcodebuild
会给你带来非常详细的输出,我无法找到任何限制其输出的选项,以便只显示警告和错误。
我正在寻找一种捕获xcodebuild
输出并对其进行过滤的方法。它更喜欢可以与管道一起使用的 Python 解决方案,但我对其他方法持开放态度,只要它们是基于命令行的解决方案。
是否有任何工具已经能够做到这一点?
使用xcodebuild -quiet
.
根据 xcodebuild 手册页:
-quiet :除了警告和错误,不打印任何输出。
奖励:无需其他工具!(虽然我也喜欢xcodebuild | xcpretty
)
我使用 Travis CI 构建,它在 4 MB 日志后抱怨。这个论点解决了这个问题。
有一个 Ruby gem 叫做xcpretty
.
它过滤输出xcodebuild
并提供不同的格式化程序和着色。
更新:正如 Mike Hardy 在对此答案的评论中正确指出的那样,xcpretty
不再维护。
这对我来说还不够。连接到 /dev/null 只会显示构建失败,但您看不到原因。理想情况下,我们可以只看到错误和/或警告,而没有所有成功的编译器命令。
这基本上完成了这项工作:
xcodebuild | grep -A 5 error:
要仅查看错误输出消息,请将标准输出重定向到 /dev/null(一个用作黑洞的特殊文件),如下所示:
xcodebuild > /dev/null
如果要将错误输出捕获到文件中,可以执行以下操作:
xcodebuild 2> ./build_errors.log
有一个 Swift 命令行工具https://github.com/thii/xcbeautify也可以格式化 xcodebuild 输出。
我喜欢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.
我正在构建一个博览会项目,并且有很多来自我不想看到的库的警告。我能够使用此命令过滤掉警告。
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 的警告
我一直被xcpretty
CI 环境中的太多信息所困扰,这使得调试错误变得非常困难。-quiet
以一种过于激进的方式隐藏输出,所以我把这个单线放在一起并称之为xcquiet.sh
. 它只隐藏特定的行,同时保留足够的原始输出并且不会吞下任何其他意外的日志条目。
如果你想删除警告使用
xcodebuild <command> | sed -e '/warning:/,/\^/d'
如果你想在使用时抑制警告,xcpretty
试试这个
xcodebuild <command> \
| sed -e '/warning:/,/\^/d' \
| xcpretty -s
我们运行 detox build 命令,它在 CI 中抛出了太多日志。
-quite
参数因隐藏日志而失败。
最好的解决方案是将日志隐藏并保存在文件中:
npx detox build -c ios &> detox_build.log