我正在尝试在OSX应用程序和命令行工具之间创建连接以使用分布式对象。
该连接在命令行工具中这样注册
[NSConnection serviceConnectionWithName:@"server" rootObject:extManager];
并且这样尝试从应用程序连接到注册的连接对象
self.serverConnection = [NSConnection connectionWithRegisteredName:@"server" host:nil];
[未对应用程序进行沙箱处理时,将建立连接。将应用程序沙箱化后,connectionWithRegisteredName
返回nil。
我曾尝试向权利中添加密钥和值,并使用团队证书对工具和应用程序进行签名,但这是行不通的
<key>com.apple.security.application-groups</key>
<array>
<string><TEAM ID>.AppSuite</string>
</array>
沙盒化后如何使连接正常工作?
这里的技巧是使用应用程序组名称作为连接名称中的前缀。即:]]
self.serverConnection = [NSConnection connectionWithRegisteredName:@"<TEAM ID>.AppSuite.server" host:nil];
为什么?
每个端口名称必须以应用程序组标识符开头,后跟一个句点(。),然后是您选择的名称。 例如,如果您的应用程序组的名称为Z123456789.com.example.app-group,则可以创建一个名为Z123456789.com.example.app-group.Port_of_Kobe的Mach端口。 Ref