iOS应用程序之间是否可以使用套接字进行进程间通信?

8

我看过很多互联网文章,大部分都说IOS应用程序可以使用协议处理程序(URL方案)实现IPC。但是,如果一个应用程序打开一个端口,而另一个应用程序尝试连接它,我们不能使用套接字实现IPC吗?


非常令人怀疑,即使在最好的情况下也只能在应用程序被挂起到后台之前有限的时间内工作。 - borrrden
2个回答

5

iOS8引入了IPC支持,通过为所谓的“应用程序组”公开mach端口来实现。查看这个很棒的教程:

http://ddeville.me/2015/02/interprocess-communication-on-ios-with-mach-messages/

它需要一些设置(在Dev Portal中定义应用程序组,生成适当的授权等),但并不是真的很难,Xcode 6会自动完成大部分工作(只需在常规功能部分启用“应用组”即可)。

我可以确认,它可以工作(我能够创建2个相互发送消息的应用程序)。

iO7没有官方支持IPS,但如果您不打算将应用程序上传到AppStore,则可以尝试利用应用程序之间的音频通信来实现此目的。 查看苹果的代码示例,它演示了3个应用程序之间的应用程序内声音数据流:

https://developer.apple.com/library/ios/samplecode/InterAppAudioSuite/Introduction/Intro.html

关联的WWDS视频:

https://developer.apple.com/wwdc/videos/#602

我没有尝试将其用于非音频用途,但无法看到为什么它不应该工作。数据速率很快,声音数据只是字节,不必被重定向到扬声器,可以按照您的意愿进行解释。

当然,在AppStore审核中会被拒绝,但对于企业或自己使用仍然可以接受。


2
不行,有几个原因。1)苹果内部不允许此操作,并设置了安全层以防止此类情况发生。2)应用程序会在短暂的延迟后触发applicationDiD/WillEnterBackground事件,此时与其进行交互的方式会急剧减少。
如果您真的想要在多个应用程序之间发送数据,请使用证书设置一个服务器,以匹配您的应用程序,这样您就可以使用APN(苹果推送通知)向应用程序发送静默推送中的数据。然后,在服务器上设置端点来触发这些发送,并使应用程序使用服务器公开的API。

安全层是什么,您能稍微解释一下吗? - Cyberzomie
这个链接是一个很好的起点。简而言之,应用程序需要root权限。在越狱的手机上可能是可能的。 - Michael Voznesensky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接