我正在尝试在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。
注意:我无意在应用商店发布此应用
答案 0 :(得分:1)
应用程序:.......
CFSTR("co.test")
控制台应用程序:...CFSTR("co.test")
您需要在应用程序组标识符的末尾附加一个附加字符串。
苹果:
每个端口名称必须以应用程序组标识符开头,后跟一个句点(。),然后是您选择的名称。
例如,如果您的应用程序组的名称为
Z123456789.com.example.app-group
,则可以创建一个名为Z123456789.com.example.app-group.Port_of_Kobe
的Mach端口。
如果使用相同的消息端口名称创建多个消息端口,则似乎还会发生另一次崩溃。也许来自具有相同捆绑ID的应用程序,或者来自其他情况,其中应该只有一个消息端口并且已经在运行一个消息端口。
当我从/Applications/
运行一个版本的macOS应用程序,并通过Xcode运行另一个版本时,我注意到了。
*** CFMessagePort:bootstrap_register():失败1100(0x44c)'权限被拒绝',端口= 0xcd07,名称='XXXYYYZZZZ.MyAppGroupName'