Macos CFMessagePort和沙箱
我正在调整MacOS应用程序以使用沙箱。它使用了一个助手应用程序(同一捆绑包中的一个exe),当我尝试在控制台中使用“deny mach lookup”消息调用CFMessagePortCreateRemote时,该应用程序失败 我可以看到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
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
我对
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。