#!/usr/bin/env python # Copyright 2013 The Flutter Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. from __future__ import absolute_import from __future__ import division from __future__ import print_function import argparse import errno import os import shutil import subprocess import sys def main(): parser = argparse.ArgumentParser( description='Creates an XCFramework consisting of the specified universal frameworks') parser.add_argument('--frameworks', nargs='+', help='The framework paths used to create the XCFramework.', required=True) parser.add_argument('--name', help='Name of the XCFramework', type=str, required=True) parser.add_argument('--location', help='Output directory', type=str, required=True) args = parser.parse_args() create_xcframework(args.location, args.name, args.frameworks) def create_xcframework(location, name, frameworks): output_dir = os.path.abspath(location) output_xcframework = os.path.join(output_dir, '%s.xcframework' % name) if not os.path.exists(output_dir): os.makedirs(output_dir) if os.path.exists(output_xcframework): # Remove old xcframework. shutil.rmtree(output_xcframework) # xcrun xcodebuild -create-xcframework -framework foo/baz.framework -framework bar/baz.framework -output output/ command = ['xcrun', 'xcodebuild', '-quiet', '-create-xcframework'] for framework in frameworks: command.extend(['-framework', os.path.abspath(framework)]) command.extend(['-output', output_xcframework]) subprocess.check_call(command, stdout=open(os.devnull, 'w')) if __name__ == '__main__': sys.exit(main())