| Index: build/config/ios/ios_sim.py
|
| diff --git a/build/config/ios/ios_sim.py b/build/config/ios/ios_sim.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..371719d5a31f64dd0cc8106884b6988e514f1f5d
|
| --- /dev/null
|
| +++ b/build/config/ios/ios_sim.py
|
| @@ -0,0 +1,106 @@
|
| +#!/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())
|
|
|