请教大神,越狱环境下不同app如何互相通信


#1

请教大神,越狱环境下,例如AppX要发送消息给AppY。可以这么做么?


#2

典型的IPC场景,可以使用方式比较多,不同的系统平台有不同的方式,通用的方式不外乎socket

根据你的应用需求,你可以使用local socket 、管道等进行通信,在一些平台上还有bridge。


#3

大神,能不能说具体一点呢


#4

楼主能具体说明是怎样的通信么?

如果是简单的传参,不越狱情况下,通过 openURL 方式就可以实现。

另外,也可以在 /var/mobile/Library/Preferences/ 下读写某个文件实现。


#5

如果使用socket通用就是套接字,AppX或者AppY作为服务端,其中之一作为客户端,两者建立socket连接将对象或者数据序列化传递进行通信。IOS平台我也是刚接触,写了几个Daemon刚好也是IPC利用 socket通信,因为要考虑程序的移植所以直接用的C写的,上面我想应该说的比较明白了。
如果不考虑移植,可以利用平台封装的一些特性,因为不甚清楚,貌似在IOS上面XPC之类也可以实现,你需要把你的需求描叙得更详细一些


#6

或许楼主已经解决,挖一下坟,指引一下后来人。
可以利用CocoaAsyncSocket:

CocoaAsyncSocket的用法,可以在Github上搜一下"CocoaAsyncSocket demo" 或看文档。很容易就实现两App之间的Socket通信。一个App开server socket, server socket bind address 127.0.0.1, 及一个port (i.e. 8090),其余的App开socket connect过去就好了。之后就是Read & Write了。
还可选择基于这FreeBSD Socket之上的CFSocket及CFStream。还有XPC。

更好的是建立一个daemon作为服务器,多少个App来了,连接过去就是了,这样就可以各个App之间互相通信了。daemon怎么写,看大神的http://iosre.com/t/run-a-daemon-as-root-on-ios/212。


#7

简单的通信可以使用通知,没错,就是通知


#8

对哦!先膜一下!
可是App间用CFNotificationCenterAddObserver & CFNotificationCenterPostNotification ,通知是能收到的,但是携带的信息userInfo是不能传递过去的,只能在App内传递。


#9

我用的是这个CocoaAsyncSocket, 我把daemon作为服务器,App作为Client, 但是我的App每次跟服务器进行socket连接的时候, 一连上马上就断了, 报错如下:

Error Domain=GCDAsyncSocketErrorDomain Code=7 “Socket closed by remote peer” UserInfo={NSLocalizedDescription=Socket closed by remote peer}

请问前辈,这是什么问题, 该如何解决呢


#10

xpc 啊, xpc 不要太好用哦。


#11

有xpc方面的教程 或者比较系统的文章吗 前辈


#12

man xpc


#13

thank you ~


#14

notify_post 用进程通讯?


#15

前辈 xpc 我现在 client 向服务器 send消息,服务器能收到, 我如何 主动让服务器向client send消息呢?


#16

客户端和服务端的连接是全双工的, 客户端怎么给服务端发,服务端就可以怎么给客户端发。


#17

前辈, 因为client 能 send 消息到 sever , 是因为我sever这边类似有个注册的操作 如下: xpc_connection_create_mach_service(xxx),
那我需要sever 主动向 client 发消息 , 是不是需要client 也要做类似这种注册操作xpc_connection_create_mach_service(xxx), ?


#18

不需要, 客户端连接上服务端以后,服务端可以拿到这个connection 对象, 这个时候客户端和服务端就都可以 调用send的方法了。


#19

嗯 确实是这样 thank you~


#20

大哥,我找了很久关于xpc的资料,但没有现成的ios下使用的样例。我看到macOS下,是需要建一个xpc service target才能起服务?ios下也是这样吗?