我目前正在为iPad应用程序开发“设备中”(不是模拟器)监视系统。该系统应该能够执行以下操作:
-用户输入模拟:模拟用户输入:点击,拖动,键盘。
-信息收集:输入后获取文本值和结果。
此信息将在以后报告给事件管理服务器。通过使用来自KIF软件https://github.com/square/KIF的一些代码和一些自行开发的代码,我已经在单个应用程序中解决了这两点。我使用UIView对象的accessibleName属性获取它们的指针,并将人造事件发送到[[UIApplication sharedApplication] sendEvent:]方法。
事情是这样的:我需要将这些事件从我所在的app#1发送到app#2。 (为了保持监视的独立性,也不能将所有代码都嵌入到app#2中)我使用[[UIApplication sharedApplication] openURL:]方法打开app#2。
https://developer.apple.com/library/IOs/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW18
问题是,我无法将事件从app#1发送到app#2,因为我似乎无法在app#1代码中获得指向app#2的[UIApplication sharedApplication]对象的指针。
进程之间的共享内存通信会很棒,但是根据我发现的信息,URL消息传递方案似乎是iOS中应用程序(或进程)之间的唯一通信。 NSConnection类在iOS中也不存在。我还阅读了一些有关Mach端口和POSIX文件描述符的信息,但是它们看起来相当复杂,我不知道它们是否可以提供帮助。
我什至尝试将app#2 [UIApplication sharedApplication]实例的指针的值作为URL参数中的字符串参数发送,然后将字符串转换回app#1中的指针,但是得到了EXC_BAD_ACCESS。我想在两个过程中指针地址并不相同。也许每个过程都有自己的“偏移”?
任何帮助将不胜感激。
最佳答案
首先,我想澄清一下,如果没有 private API,您想做的事情是不可能的。
每个应用程序都是沙盒,您不能(直接)访问其他应用程序。我认为您的问题确实很大。
在iOS中运行的每个应用程序就像一个小型,独立的生态系统,当用户按下“主页”按钮时会终止运行(除非您声明一些后台服务,如VOIP,本地化或音频播放器)。关闭应用程序后,您唯一仍然可以运行的过程是不超过10分钟的过程。这是为了防止过多使用后台任务,即使在这里,也无法从其他应用程序访问该应用程序。
我认为唯一的方法是搜索 private API,希望其他人已经找到一种在2个应用之间直接创建数据流的方法。