1 # Copyright 2016 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 6 import argparse 7 import os 8 import re 9 import subprocess 10 import sys 11 12 13 def main(): 14 parser = argparse.ArgumentParser( 15 description='A script to compile xib and storyboard.', 16 fromfile_prefix_chars='@') 17 parser.add_argument('-o', '--output', required=True, 18 help='Path to output bundle.') 19 parser.add_argument('-i', '--input', required=True, 20 help='Path to input xib or storyboard.') 21 args, unknown_args = parser.parse_known_args() 22 23 ibtool_args = [ 24 'xcrun', 'ibtool', 25 '--errors', '--warnings', '--notices', 26 '--output-format', 'human-readable-text' 27 ] 28 ibtool_args += unknown_args 29 ibtool_args += [ 30 '--compile', 31 os.path.abspath(args.output), 32 os.path.abspath(args.input) 33 ] 34 35 ibtool_section_re = re.compile(r'/\*.*\*/') 36 ibtool_re = re.compile(r'.*note:.*is clipping its content') 37 ibtoolout = subprocess.Popen(ibtool_args, stdout=subprocess.PIPE) 38 current_section_header = None 39 for line in ibtoolout.stdout: 40 if ibtool_section_re.match(line): 41 current_section_header = line 42 elif not ibtool_re.match(line): 43 if current_section_header: 44 sys.stdout.write(current_section_header) 45 current_section_header = None 46 sys.stdout.write(line) 47 return ibtoolout.returncode 48 49 50 if __name__ == '__main__': 51 sys.exit(main()) 52