| #!/usr/bin/env python3 |
| # |
| # 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. |
| |
| 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()) |