I am working on an App and I am in the process of adding Syphon support.
Syphon uses CFMessagePort for IPC and passing of FrameBuffer data (MTLTexture) between apps - and is widely used in the professional video app and video production space.
What I have noticed is that when the App is built as a Sandbox app, during the Syphon initialization, I see the following error message in the log:
*** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x8703, name = 'info.v002.Syphon.D2499DBD-93AE-4CEA-B21F-FF356DCC069D'
See /usr/include/servers/bootstrap_defs.h for the error codes.
Syphon uses the "info.v002.Syphon.UUID" naming convention to identify IPC Syphon servers, so I don't think I can use the App Groups naming convention for Sandbox support.
I have a very simple example app on github that publishes SpriteKit frames as a Syphon Server. To see the issue, simply enable App Sandbox for the build, and run the app. You should see the error message in the log and no data appears in any Syphon Client (I use Syphon Recorder for testing - available at syphon.github . io
I am looking for other options to enable CFMessagePorts on a Sandbox App.
My app is already shipping on the Mac App Store
Yeah, that makes things tricky. I don’t see any way to implement the IPC protocol as you’ve described it in a sandboxed app. Given that, I see two possible paths forward:
-
You could build some sort of adaptor that bridges between your app and this protocol, and distribute that directly using Developer ID signing.
-
You could engage with the Syphon community to rework or extend the protocol into something that’s compatible with the App Sandbox.
Both of these are tricky. The first has potential App Review implications. The second assumes that it’s possible to design such a protocol, and then you have to get other apps to update.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"