OSX应用程序和命令行工具之间的NSConnection

时间:2016-09-13 17:26:56

标签: macos app-store sandbox entitlements nsconnection

我正在尝试在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>

如何在沙盒化时使连接正常工作?

1 个答案:

答案 0 :(得分:0)

此处的技巧是使用应用程序组名称作为连接名称中的前缀。即:

self.serverConnection = [NSConnection connectionWithRegisteredName:@"<TEAM ID>.AppSuite.server" host:nil];

为什么?

每个端口名称必须以应用程序组标识符开头,后跟一个句点(。),然后是您选择的名称。
例如,如果您的应用程序组的名称为Z123456789.com.example.app-group,则可以创建一个名为Z123456789.com.example.app-group.Port_of_Kobe的马赫端口。
Ref