| #!/usr/bin/python |
| # Copyright (c) 2015 The Chromium 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 subprocess |
| import sys |
| import re |
| |
| SIMCTL_PATH = [ |
| '/usr/bin/env', |
| 'xcrun', |
| 'simctl', |
| ] |
| |
| PLIST_BUDDY_PATH = [ |
| '/usr/bin/env', |
| 'xcrun', |
| 'PlistBuddy', |
| ] |
| |
| |
| def ApplicationIdentifier(path): |
| identifier = subprocess.check_output(PLIST_BUDDY_PATH + [ |
| '-c', |
| 'Print CFBundleIdentifier', |
| '%s/Info.plist' % path, |
| ]) |
| return identifier.strip() |
| |
| |
| def Install(args): |
| return subprocess.check_call(SIMCTL_PATH + [ |
| 'install', |
| 'booted', |
| args.path, |
| ]) |
| |
| |
| def InstallLaunchAndWait(args, wait): |
| res = Install(args) |
| |
| if res != 0: |
| return res |
| |
| identifier = ApplicationIdentifier(args.path) |
| |
| launch_args = [ 'launch' ] |
| |
| if wait: |
| launch_args += [ '-w' ] |
| |
| launch_args += [ |
| 'booted', |
| identifier, |
| ] |
| |
| return subprocess.check_output(SIMCTL_PATH + launch_arg).strip() |
| |
| |
| def Launch(args): |
| InstallLaunchAndWait(args, False) |
| |
| |
| def Debug(args): |
| launch_res = InstallLaunchAndWait(args, True) |
| launch_pid = re.search('.*: (\d+)', launch_res).group(1) |
| return os.system(' '.join([ |
| '/usr/bin/env', |
| 'xcrun', |
| 'lldb', |
| '-s', |
| os.path.join(os.path.dirname(__file__), 'lldb_start_commands.txt'), |
| '-p', |
| launch_pid, |
| ])) |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(description='A script that launches an' |
| ' application in the simulator and attaches' |
| ' the debugger to the same') |
| |
| parser.add_argument('-p', dest='path', required=True, |
| help='Path the the simulator application') |
| |
| subparsers = parser.add_subparsers() |
| |
| launch_parser = subparsers.add_parser('launch', help='Launch') |
| launch_parser.set_defaults(func=Launch) |
| |
| install_parser = subparsers.add_parser('install', help='Install') |
| install_parser.set_defaults(func=Install) |
| |
| debug_parser = subparsers.add_parser('debug', help='Debug') |
| debug_parser.set_defaults(func=Debug) |
| |
| args = parser.parse_args() |
| return args.func(args) |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |