目的: 让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
网友评论