Я использую ios-deploy
для автоматического запуска приложения ios, оно работает нормально, но только для проверки: оно не перезапустит приложение, если оно уже запущено.
Я изучил его исходный код и узналон использует команду lldb
для запуска приложения.сценарий lldb (часть):
def run_command(debugger, command, result, internal_dict):
device_app = internal_dict['fruitstrap_device_app']
args = command.split('--',1)
error = lldb.SBError()
lldb.target.modules[0].SetPlatformFileSpec(lldb.SBFileSpec(device_app))
args_arr = []
if len(args) > 1:
args_arr = shlex.split(args[1])
args_arr = args_arr + shlex.split('{args}')
launchInfo = lldb.SBLaunchInfo(args_arr)
global listener
launchInfo.SetListener(listener)
#This env variable makes NSLog, CFLog and os_log messages get mirrored to stderr
#https://stackoverflow.com/a/39581193
launchInfo.SetEnvironmentEntries(['OS_ACTIVITY_DT_MODE=enable'], True)
lldb.target.Launch(launchInfo, error)
lockedstr = ': Locked'
if lockedstr in str(error):
print('\\nDevice Locked\\n')
os._exit(254)
else:
print(str(error))
команда запуска:
(lldb) источник команды -s 0 '/ tmp / BB1ED2A3-3A3E-413A-935D-323D7A7533D1 / fruitstrap-lldb-prep-cmds-6a050aabefc708cb7fc6024c4dd1743080d6e20b 'Выполнение команд в' / tmp / BB1ED2A3-3A3E-413A-935D-323D7Ab40650b6-df050b6-dfb5-df5-db6-df5-df5-df5-df5-df5-df5-df5-df6(lldb) платформа select remote-ios --sysroot '/ Users / wellbye / Библиотека / Разработчик / Xcode / iOS DeviceSupport / 12.0 (16A366) / Платформа символов: remote-ios Подключено: нет пути SDK: "/ Users / wellbye /Библиотека / Разработчик / Xcode / iOS DeviceSupport / 12.0 (16A366) / Целевые символы (lldb) target create "/ Users / wellbye / git-repo / j / mj3d / Product / build / ios / Build / Products / Release-iphoneos / mj.app "Текущий исполняемый файл установлен в '/Users/wellbye/git-repo/j/mj3d/Product/build/ios/Build/Products/Release-iphoneos/mj.app' (arm64).(lldb) сценарий fruitstrap_device_app = "/ private / var / container / Bundle / Application / 1FB0E7E3-6616-4789-8E6F-598C4F5AAC35 / mj.app" (lldb) сценарий fruitstrap_connect_url = "connect: //127.0.0.1: 62276"
(lldb) пути поиска целевых модулей добавить / usr "/ Пользователи / wellbye / Библиотека / Разработчик / Xcode / iOS DeviceSupport / 12.0 (16A366) / Символы / usr" / Система "/ Пользователи / wellbye / Библиотека / Разработчик / Xcode/ iOS DeviceSupport / 12.0 (16A366) / Символы / Система "" / private / var / Containers / Bundle / Application / 1FB0E7E3-6616-4789-8E6F-598C4F5AAC35 "" / Пользователи / wellbye / git-repo / j / mj3d / Product/ build / ios / Build / Продукты / Release-iphoneos "" / var / container / Bundle / Application / 1FB0E7E3-6616-4789-8E6F-598C4F5AAC35 "" / Пользователи / wellbye / git-repo / j / mj3d / Product / build/ ios / Build / Продукты / Release-iphoneos "/ Developer" / Пользователи / wellbye / Библиотека / Разработчик / Xcode / iOS DeviceSupport / 12.0 (16A366) / Импорт сценария команды символов / Developer "(lldb)" / tmp / BB1ED2A3-3A3E-413A-935D-323D7A7533D1 / fruitstrap_6a050aabefc708cb7fc6024c4dd1743080d6e20b.py "(lldb) добавить командный скрипт -е fruitstrap_6a050aabefc708cb7fc6024c4dd1743080d6e20b.connect_command подключения (lldb) команда сценарий добавить -s -f асинхронного fruitstrap_6a050aabefc708cb7fc6024c4dd1743080d6e20b.run_command запустить
(lldb) командного сценария добавить -s -f асинхронного fruitstrap_6a050aabefc708cb7fc6024c4dd1743080d6e20b.autoexit_command AutoExit (lldb) команда сценарий добавить -s -f асинхронным fruitstrap_6a050aabefc708cb7fc6024c4dd1743080d6e20b.safequit_command safequit (lldb) connect (lldb) run
Я искал ссылку на API Python для lldb, но не увидел ничего (аргументы или флаги), которое мог бы использовать для своих целей.
Итак, как мы можем сообщить серверу lldb, что он должен уничтожить существующий процесс и запустить новый?