Получить extern [UIApplication sharedApplication]? - PullRequest
1 голос
/ 01 марта 2012

В настоящее время я разрабатываю систему мониторинга «на устройстве» (а не на симуляторе) для приложения для 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. Я предполагаю, что адрес указателя не означает то же самое в обоих процессах. Может быть, у каждого процесса есть свое «смещение»? Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 01 марта 2012

Прежде всего я хотел бы уточнить, что то, что вы хотите сделать, невозможно без частных API. Каждое приложение находится в изолированной программной среде, и вы не можете получить доступ к другим приложениям (напрямую). Я думаю, что ваша проблема действительно большая.

Каждое приложение, работающее в iOS, похоже на маленькую независимую экосистему, которая заканчивается, когда пользователь нажимает кнопку «Домой» (кроме случаев, когда вы объявляете некоторые фоновые сервисы, такие как VOIP, локализация или аудиоплеер). После того, как приложение было закрыто, единственное, что вы можете запустить, - это процесс, который не должен длиться более 10 минут. Это сделано для предотвращения чрезмерного использования фоновых задач, и даже здесь приложение недоступно из других приложений.

Я думаю, что единственный способ - это поиск частных API, надеясь, что кто-то другой уже нашел способ создания потоковой передачи данных (напрямую) между двумя приложениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...