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

问题描述 投票:5回答:1

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

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

macos app-store sandbox entitlements nsconnection
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.