【问题标题】:How to filter the xcodebuild command line output?如何过滤 xcodebuild 命令行输出?
【发布时间】:2011-01-15 17:20:57
【问题描述】:

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

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

是否有任何工具已经能够做到这一点?

【问题讨论】:

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


    【解决方案1】:

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

    xcodebuild > /dev/null

    如果你想将错误输出捕获到一个文件中,你可以这样做:

    xcodebuild 2> ./build_errors.log

    【讨论】:

    • 如果您在构建服务器上尝试此操作,请确保构建代理对该路径具有权限。发生在我身上的是构建继续进行并超时,而没有警告 GitLab 中的权限问题。
    【解决方案2】:

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

    这基本上可以完成工作:

    xcodebuild | grep -A 5 error:
    

    【讨论】:

    • egrep '^(/.+:[0-9+:[0-9]+:.(error|warning):|fatal|===)' - 也可以得到说明 xcodebuild 将要做什么的行。
    【解决方案3】:

    有一个名为 xcpretty 的 Ruby gem。

    它过滤xcodebuild 的输出,还提供不同的格式化程序和颜色。

    更新:正如 Mike Hardy 在 cmets 中对此答案的正确陈述,xcpretty 不再维护。

    【讨论】:

    • 请给这个答案投票,这个工具很棒,比 grep 更好地解决问题
    • 这个工具太棒了!为什么我以前没有发现它?!
    • xcpretty 是一个与 xcodebuild 结合使用的有用工具。
    • @Koraktor- 我可以将它与 ANT exec 任务(用于 xcodebuild)一起用作参数吗?
    • xcpretty 已被废弃且不再维护。 -quiet 是方式
    【解决方案4】:

    我喜欢 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.
    

    【讨论】:

      【解决方案5】:

      使用xcodebuild -quiet

      根据 xcodebuild 手册页:

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

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

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

      【讨论】:

      • 这应该被标记为正确答案。谢谢!
      • 不幸的是,仅适用于 Xcode 8+。对于以前的 Xcode,请参阅@rosejn 的回答。
      【解决方案6】:

      -quiet 是目前最好的方法。

      【讨论】:

      • 安静对我来说太安静了。 xcpretty 死了。 xcbeautify 是一款出色且维护良好的新工具
      【解决方案7】:

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

      【讨论】:

      • 不错!自从 xcpretty 被遗弃后,一直在寻找东西。 xcbeautify 很棒,谢谢
      【解决方案8】:

      我正在构建一个 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 的警告

      【讨论】:

      • 当您在无法控制的 pod 中出现您不喜欢的警告时(例如 libevent,在 react-native / expo 构建中),您希望实际禁用它们,因为它们基本上超出了范围为你。您可以在 podfile postinstall 中执行此操作,例如 github.com/invertase/…
      【解决方案9】:

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

      【讨论】:

        【解决方案10】:

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

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

        npx detox build -c ios &> detox_build.log
        

        【讨论】:

          【解决方案11】:

          如果你想删除警告使用

          xcodebuild <command> | sed -e '/warning:/,/\^/d'
          

          如果您想在使用 xcpretty 时抑制警告,请尝试此操作

          xcodebuild <command> \
              | sed -e '/warning:/,/\^/d' \
              | xcpretty -s
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-04
            • 1970-01-01
            • 1970-01-01
            • 2016-05-23
            • 2022-08-16
            • 1970-01-01
            相关资源
            最近更新 更多