Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos CFMessagePort和沙箱_Macos_Sandbox_Appstore Sandbox - Fatal编程技术网

Macos CFMessagePort和沙箱

Macos CFMessagePort和沙箱,macos,sandbox,appstore-sandbox,Macos,Sandbox,Appstore Sandbox,我正在调整MacOS应用程序以使用沙箱。它使用了一个助手应用程序(同一捆绑包中的一个exe),当我尝试在控制台中使用“deny mach lookup”消息调用CFMessagePortCreateRemote时,该应用程序失败 我可以看到com.apple.security.temporary exception.mach lookup.global name权限密钥可以解决这个问题,但它只是临时的 有没有办法在沙盒应用程序中通过mach端口实现两个应用程序之间的通信 错误: let port

我正在调整MacOS应用程序以使用沙箱。它使用了一个助手应用程序(同一捆绑包中的一个exe),当我尝试在控制台中使用“deny mach lookup”消息调用CFMessagePortCreateRemote时,该应用程序失败

我可以看到
com.apple.security.temporary exception.mach lookup.global name
权限密钥可以解决这个问题,但它只是临时的

有没有办法在沙盒应用程序中通过mach端口实现两个应用程序之间的通信

错误:

let port = CFMessagePortCreateLocal(nil, "XXXYYYZZZZ.MyAppGroupName" as CFString, Callback, nil, nil)
let runLoopSource = CFMessagePortCreateRunLoopSource(kCFAllocatorDefault, port, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, .commonModes)
***CFMessagePort:bootstrap_register():失败1100(0x44c)“权限被拒绝”,端口=0x14807,名称='xxxyyzzzz.MyAppGroupName'


对于目标应用程序和辅助程序exe:

  • 启用沙箱
  • 添加以您的团队ID为前缀的公共组 Z123456789.com.example.app-group

使用teamID ex命名马赫端口:

Z123456789.com.example.app-group.Port_of_Kobe


我对
CFMessagePortCreateRunLoopSource
的调用在
CFMessagePortCreateLocal
中使用错误的
CFStringRef name
参数时崩溃

我使用的是我的应用程序组的名称,
xxxyyzzzz.MyAppGroupName

在阅读了苹果的文档后,我将其更改为
xxxyyzzzzz.MyAppGroupName.someOtherString
,崩溃消失了

马赫端口名称必须以应用程序组标识符开头,后跟句点(.),后跟您选择的名称

例如,如果应用程序组的名称为
Z123456789.com.example.app group
,则可以创建一个名为
Z123456789.com.example.app group.port\u of_Kobe
的马赫端口

编辑:

第二天早上,我尝试运行相同的代码。这一次,我得到的崩溃与我昨晚使用的相同的附加
“.someOtherString”
。如果我换成其他字符串,效果很好。这是令人沮丧的,因为我不知道该字符串何时/如何变得无效

线程1:EXC\u错误访问(代码=1,地址=0x8) ***CFMessagePort:bootstrap_register():失败1100(0x44c)'Permission denied',port=0xcd07,name='xxxyyzzzzzz.MyAppGroupName.someOtherString'

编辑2:

我又撞车了,这次是用新绳子。该问题可能与从
/Applications/
文件夹运行应用程序版本以及从我的Xcode build文件夹运行应用程序版本有关

端口名在当前用户上下文中通常是唯一的;否则,您可能会遇到冲突


注意:在创建马赫端口字符串时,在应用程序组ID的末尾添加附加的
.Port\u of_Kobe
字符串!非常重要。您不能仅使用您的应用程序组ID。