В настоящее время я разрабатываю систему мониторинга «на устройстве» (а не на симуляторе) для приложения для iPad. Система должна быть в состоянии сделать следующее:
- Имитация пользовательского ввода: имитация пользовательского ввода: нажатия, перетаскивания, клавиатура.
- Воспоминание информации: получить текстовые значения и результаты после ввода.
Эта информация будет позже сообщена на сервер управления событиями. Я уже позаботился о двух моментах в одном приложении, используя некоторый код из программного обеспечения KIF https://github.com/square/KIF и некоторый собственный код. Я использую свойство availableName объектов UIView, чтобы получить их указатель и отправить искусственные события в метод [[UIApplication sharedApplication] sendEvent:].
Вот в чем дело: мне нужно отправить эти события из приложения № 1, в котором я нахожусь, в приложение № 2. (Чтобы сохранить независимость мониторинга, встраивать весь код в приложение № 2 нельзя) Я использую метод [[UIApplication sharedApplication] openURL:], чтобы открыть приложение № 2.
https://developer.apple.com/library/IOs/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW18
Проблема в том, что я не могу отправить события из приложения № 1 в приложение № 2, потому что не могу получить указатель на объект [UIApplication sharedApplication] приложения № 2 в коде приложения № 1.
Связь между разделяемой памятью между процессами была бы хорошей, но согласно информации, которую я нашел, схема обмена сообщениями по URL, похоже, является единственной связью между приложениями (или процессами) в iOS. Класс NSConnection также отсутствует в iOS. Я также немного читал о портах Mach и дескрипторах файлов POSIX, но они кажутся довольно сложными, и я не знаю, могут ли они помочь.
Я даже пытался отправить значение указателя экземпляра приложения №2 [UIApplication sharedApplication] в качестве строкового параметра в сообщении URL, затем преобразовал строку обратно в указатель в приложении № 1, но получил EXC_BAD_ACCESS. Я предполагаю, что адрес указателя не означает то же самое в обоих процессах. Может быть, у каждого процесса есть свое «смещение»?
Любая помощь будет принята с благодарностью.