iOS9下APP和Tweak通信

尝试在APP文件夹内写入plist文件失败,打包成deb安装后无法创建并写入plist文件,
请问一般APP和Tweak的数据传输使用什么样的解决方案呢。

进程间通信,一般采用notify_post或者CPDistributedMessagingCenter,前者适用于无需传递详细信息的情况,后者适用于需要传递详细信息的情况。google一下就可以找到用法了

1 个赞

嗯,逆向了别人的插件,是用的CPDistributedMessagingCenter,正在学习中,谢谢大大解答。

1 个赞

这个CPDistributedMessagingCenter好像要利用rocket bootstrap吧,而且只能tweak中注册服务,单向通信

1 个赞

CFMessagePort呢?从用法上看似乎是CPDistributedMessagingCenter的更底层

我没用过这个,它是CoreFoundation系函数,应该是更底层的,但是用起来没有CPDistributedMessagingCenter方便啊

不需要 rocker bootstrap,是否单向通信我不是很了解,但是从APP发送数据给插件是没有问题的。

嗯,CPDistributedMessagingCenter的调用确实更简单,可惜当初做这块的时候只知道CFMessagePort…

CFMessagePort是单向的,只能client主动向server发消息,所以CPDistributedMessagingCenter应该也是一样

嗯,是的,在使用中发现确实如此~

CPDistributedMessagingCenter 有具体的例子么?

你好,我在xcode里面建了两个项目,一个是server端,实现CFNotificationCenterAddObserver作为监听,一个是client端实现CFNotificationCenterPostNotification向server端的那个app发消息,可是发现server端只能监听到一次,回调只回调了一次,之后不过client post多少次都没回调了,需要重启应用才又能接收到一次post的信息,请问是什么问题呢?

要不你看看我的一个项目,实现了插件和服务端的通讯,我有一段时间没写tweak了。

1 个赞

好的,多谢了

不好意思啊,我只用过CFMessagePort,所以你说的这个"CFNotificationCenter***"方法我并不了解,理论上使用更上层的API也不应该会出现你说的问题。

不清楚你的系统环境,我能告诉你的是:CFMessagePort在iOS9.3.3上也能正常使用,无论tweak、daemon还是app。

CFMessagePort的话都需要root权限吧?我的iOS9.0.2,今天在普通的app上使用CFMessagePort相关的方法就崩溃了,然后让app用root权限去运行的话,就可以正常工作,请问如果不是root权限运行,也可以使用CFMessagePort进行通讯吗

非root权限我没试过呢,从你的测试结果来看是需要root才行。

CPDistributedMessagingCenter 消息回发送失败的