107 строки
2.2 KiB
Python
Executable File
107 строки
2.2 KiB
Python
Executable File
#!/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())
|