美文网首页
Bazel-Assets资源warning转error (一)

Bazel-Assets资源warning转error (一)

作者: 西博尔 | 来源:发表于2021-04-09 14:30 被阅读0次

    目的: 让Bazel编译的时候 打包Assets资源的时候, 将warning当成error输出

    第一期的思路:不一定是最优的

    1.Xcode打包Asstes的时候用的指令是:
    actool xxx.xcassets --compile build --platform iphoneos --minimum-deployment-target 9.0 --warnings --error
    
    2.去build_bazel_rules_apple全局查找actool

    找到两个非常可疑的bzl文件
    actool.bzl
    xctoolrunner
    最终我锁定到了 xctoolrunner当中的def _execute_and_filter_with_retry(xcrunargs, filtering):

    3. _execute_and_filter_with_retry实现

    我再return_code == 0下面增加了自己的判断, 如果stdout结果里面包含
    com.apple.actool.document.warnings 就是证明产生了警告, 那么久调用sys.stderr.write原本输出错误的方法

    但是发现xcode并没有停下来,并没有红色错误输出 , 我就猜测这个return 0返回的可能就是正常情况, 如果返回非0 就报错, 尝试了一下, 果不其然 ,改成return 1 就会让xcode报错, 停下来

    def _execute_and_filter_with_retry(xcrunargs, filtering):
      print(xcrunargs)
      print(filtering)
      return_code, stdout, stderr = execute.execute_and_filter_output(
          xcrunargs,
          trim_paths=True,
          filtering=filtering,
          print_output=False)
    
      # If there's a retry, don't print the first failing output.
      if return_code == 0:
        if stdout:
          if "com.apple.actool.document.warnings" in stdout:
            sys.stderr.write("actool -----------%s" % stdout)
            return 1
          else:
            sys.stdout.write("%s" % stdout)
    
        if stderr:
          sys.stderr.write("actool -----------%s" % stderr)
        return return_code
    
      return_code, _, _ = execute.execute_and_filter_output(
          xcrunargs,
          trim_paths=True,
          filtering=filtering,
          print_output=True)
      return return_code
    
    

    下一篇:Bazel-修改rules_apple将 warning_as_error (二)

    相关文章

      网友评论

          本文标题:Bazel-Assets资源warning转error (一)

          本文链接:https://www.haomeiwen.com/subject/dsiikltx.html