获取extern [UIApplication sharedApplication]?

时间:2012-03-01 12:49:17

标签: iphone objective-c ios ipad

我目前正在为iPad应用程序开发一个“设备内”(非模拟器)监控系统。系统应该能够执行以下操作:

- 用户输入模拟:模拟用户输入:点击,拖动,键盘。

- 信息回忆:在输入后获取文本值和结果。

此信息稍后将报告给事件管理服务器。通过使用KIF软件https://github.com/square/KIF中的一些代码和一些自行开发的代码,我已经在单个应用程序中处理了这两点。我使用UIView对象的accessibleName属性来获取它们的指针并将人工事件发送到[[UIApplication sharedApplication] sendEvent:]方法。

事情就是这样:我需要将这些事件从app#1发送到app#2。 (为了保持监控独立,还在app#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,因为我似乎无法获得应用#1代码中应用#2的[UIApplication sharedApplication]对象的指针。

进程之间的共享内存通信会很棒,但根据我发现的信息,URL消息传递方案似乎是iOS中应用程序(或进程)之间的唯一通信。 NSConnection类在iOS中也不存在。我还阅读了一些关于Mach端口和POSIX文件描述符的内容,但它们看起来相当复杂,我不知道它们是否可以提供帮助。

我甚至尝试将app#2 [UIApplication sharedApplication]实例的指针值作为字符串参数发送到URL消息中,然后将字符串转换回app#1中的指针,但得到了EXC_BAD_ACCESS。我想指针地址在两个进程中并不相同。也许每个过程都有自己的“偏移”? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

首先,我要说明如果没有私有API,你想做的事情是不可能的。 每个应用程序都是沙盒,您无法访问其他应用程序(直接)。我认为你的问题真的很大。

在iOS中运行的每个应用程序都像小型独立的生态系统,当用户按下“主页”按钮时结束(除非您声明某些后台服务,如VOIP,本地化或音频播放器)。一旦应用程序关闭,您仍然可以运行的唯一事情是一个不应超过10分钟的过程。这是为了防止过度使用后台任务,即使在这里,也无法从其他应用访问该应用。

我认为唯一的方法是搜索私有API,希望其他人已经找到了在2个应用之间(直接)创建数据流的方法。