Theos使用mach端口进行应用程序间通信

时间:2015-07-02 10:31:10

标签: ios objective-c ipc jailbreak theos

我正在尝试在iOS 8上的应用程序和控制台应用程序(使用theos)之间发送数据。

我试过了:

应用

CFMessagePortRef port = CFMessagePortCreateLocal(kCFAllocatorDefault, CFSTR("co.test"), &message_callback, NULL, NULL);

这很好用。 NSLog(@"%@", port)返回:

<CFMessagePort 0x17018bef0 [0x198094f50]>{locked = Maybe, valid = Yes, remote = No, name = co.test, source = 0x0, callout = message_callback (0x1000e979c), context = <CFMessagePort context 0x0>}

但是,当尝试在控制台应用上执行相同的操作时:

CFMessagePortRef port = CFMessagePortCreateLocal(kCFAllocatorDefault, CFSTR("co.test"), &message_callback, NULL, NULL);

我总是得到错误:

  

*** CFMessagePort:bootstrap_register():失败1100(0x44c)'权限被拒绝',端口= 0xc03,名称='co.test'

即使我对两者使用相同的com.apple.security.application-groups权利:

<key>com.apple.security.application-groups</key>
<array>
    <string>co.test</string>
</array>

任何人都可以放弃任何光明 - 也许以上是一种可怕的方法,我错过了一种更容易实现目标的方法吗?

我的目标是能够在SpringBoard上运行的应用程序和使用theos构建的守护程序之间传递NSDictionary。

注意:我无意在应用商店发布此应用

1 个答案:

答案 0 :(得分:1)

  

应用程序:....... CFSTR("co.test")
  控制台应用程序:... CFSTR("co.test")

您需要在应用程序组标识符的末尾附加一个附加字符串。

  

苹果:

     

每个端口名称必须以应用程序组标识符开头,后跟一个句点(。),然后是您选择的名称。

     

例如,如果您的应用程序组的名称为Z123456789.com.example.app-group,则可以创建一个名为Z123456789.com.example.app-group.Port_of_Kobe的Mach端口。

CFMessagePort and sandboxing

如果使用相同的消息端口名称创建多个消息端口,则似乎还会发生另一次崩溃。也许来自具有相同捆绑ID的应用程序,或者来自其他情况,其中应该只有一个消息端口并且已经在运行一个消息端口。

当我从/Applications/运行一个版本的macOS应用程序,并通过Xcode运行另一个版本时,我注意到了。

  

*** CFMessagePort:bootstrap_register():失败1100(0x44c)'权限被拒绝',端口= 0xcd07,名称='XXXYYYZZZZ.MyAppGroupName'