【问题标题】:NSConnection between an OSX app and a command line toolOSX 应用程序和命令行工具之间的 NSConnection
【发布时间】:2017-01-21 09:28:52
【问题描述】:

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

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

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

    为什么?

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

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 2016-10-04
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      • 2020-05-11
      • 2013-06-08
      相关资源
      最近更新 更多