I have an application running in the sandbox which launches an application bundle using NSTask.
The main app entitlements enable sandbox add the User Selected File Read/Write permission.
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
</dict>
The child app entitlements enable sandbox and inherit.
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
When invoke NSSavePanel *savePanel = [NSSavePanel savePanel]
in the child process, system will throw the error.The error message prompt that missing the User Selected File Read/Write permission.
However, I have already added this permission in the main app, and I have set up the inherit in the child-process as well. The child process cannot add the User Selected File Read/Write permission again because it add sandbox and inherit in entitlements by the doc EnablingAppSandbox . It appears that the system is not inheriting this permission for the child process.
panel[60195:2499353] [OpenSavePanels] Unable to display save panel: your app is missing the User Selected File Read/Write app sandbox entitlement. Please ensure that your app's target capabilities include the proper entitlements.
And the error stack.
[miscellany] CLIENT ERROR: remote view delegate NSSavePanel lacks method which can react to the details of Error Domain=com.apple.ViewBridge Code=14 "(null)" UserInfo={com.apple.ViewBridge.error.hint=-[NSViewServiceMarshal bootstrap:withReply:] caught NSInternalInconsistencyException '+[NSOpenAndSavePanelService loadViewToService:isOpenPanel:appCentric:] : failed entitlements check' with backtrace (
"0 CoreFoundation __exceptionPreprocess + 242",
"1 libobjc.A.dylib objc_exception_throw + 48",
"2 CoreFoundation -[NSException raise] + 9",
"3 com.apple.appkit.xpc.openAndSavePan com.apple.appkit.xpc.openAndSavePan + 16852",
"4 AppKit -[NSViewController _loadViewIfRequired] + 72",
"5 AppKit __24-[NSViewController view]_block_invoke + 27",
"6 AppKit NSPerformVisuallyAtomicChange + 132",
"7 AppKit -[NSViewController view] + 123",
"8 ViewBridge -[NSViewServiceMarshal _bootstrap:replyData:completion:] + 1826",
"9 ViewBridge -[NSViewServiceMarshal bootstrap:withReply:] + 245",
"10 CoreFoundation __invoking___ + 140",
"11 CoreFoundation -[NSInvocation invoke] + 305",
"12 CoreFoundation -[NSInvocation invokeWithTarget:] + 70",
"13 ViewBridge -[NSVB_ViewServiceImplicitAnimationDecodingProxy forwardInvocation:] + 178",
"14 CoreFoundation ___forwarding___ + 756",
"15 CoreFoundation _CF_forwarding_prep_0 + 120",
"16 CoreFoundation __invoking___ + 140",
"17 CoreFoundation -[NSInvocation invoke] + 305",
"18 CoreFoundation -[NSInvocation invokeWithTarget:] + 70",
"19 ViewBridge -[NSVB_QueueingProxy forwardInvocation:] + 321",
"20 CoreFoundation ___forwarding___ + 756",
"21 CoreFoundation _CF_forwarding_prep_0 + 120",
"22 CoreFoundation __invoking___ + 140",
"23 CoreFoundation -[NSInvocation invoke] + 305",
"24 CoreFoundation -[NSInvocation invokeWithTarget:] + 70",
"25 CoreFoundation ___forwarding___ + 756",
"26 CoreFoundation _CF_forwarding_prep_0 + 120",
"27 CoreFoundation __invoking___ + 140",
"28 CoreFoundation -[NSInvocation invoke] + 305",
"29 ViewBridge __deferNSXPCInvocationOntoMainThread_block_invoke + 142",
"30 ViewBridge __wrapBlockWithVoucher_block_invoke + 37",
"31 ViewBridge kNotRunningOnAppKitCompatibleThread_block_invoke + 323",
"32 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12",
"33 CoreFoundation __CFRunLoopDoBlocks + 398",
"34 CoreFoundation __CFRunLoopRun + 2015",
"35 CoreFoundation CFRunLoopRunSpecific + 560",
"36 HIToolbox RunCurrentEventLoopInMode + 292",
"37 HIToolbox ReceiveNextEventCommon + 657",
"38 HIToolbox _BlockUntilNextEventMatchingListInModeWithFilter + 64",
"39 AppKit _DPSNextEvent + 858",
"40 AppKit -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1214",
"41 ViewBridge __77-[NSViewServiceApplication vbNextEventMatchingMask:untilDate:inMode:dequeue:]_block_invoke + 111",
"42 ViewBridge -[NSViewServiceApplication _withToxicEventMonitorPerform:] + 114",
"43 ViewBridge -[NSViewServiceApplication vbNextEventMatchingMask:untilDate:inMode:dequeue:] + 151",
"44 ViewBridge -[NSViewServiceApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 99",
"45 AppKit -[NSApplication run] + 586",
"46 AppKit NSApplicationMain + 817",
"47 libxpc.dylib _xpc_objc_main + 867",
"48 libxpc.dylib xpc_main + 96",
"49 ViewBridge xpc_connection_handler + 0",
"50 ViewBridge NSViewServiceMain + 1789",
"51 com.apple.appkit.xpc.openAndSavePan main + 178",
"52 dyld start + 1903"
), com.apple.ViewBridge.error.description=NSViewBridgeErrorServiceBootstrap}