Bazel-Assets资源warning转error (一)

2021-04-09  本文已影响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 (二)

上一篇下一篇

猜你喜欢

热点阅读