I'm trying to plan a product I'd like to build and release on the Mac App Store.
I have a lot of functionality in a Go program that I'd like to use from an Electron app, ideally I would like to use gRPC to interface between them. I'm concerned that this will be rejected by the app review process, can anyone tell me:
- Is it allowable to have your main app 'call' a bundled Go program?
- If it is, would I be limited to stdin/stdout (I'm concerned that to use gRPC my Go Program would have to run at startup and that may not be allowed)?
I've tried to establish the answers to the above by reading this https://developer.apple.com/app-store/review/guidelines/ but without experience which hopefully some of you have I can't be sure. I'd like to avoid investing a lot of time building it a way that will be rejected.
Edit/Update:
An update - Doing some further research and thinking, I have re-read this part of the App Store review guidelines "2.4.5 (iii) They may not auto-launch or have other code run automatically at startup or login without consent nor spawn processes that continue to run without consent after a user has quit the app.".
- Looking at it, the "other code" I would run would have consent (as part of the app bundle structure/package) and I would engineer it so that it would shut when the user quits the app.
I also found that an applications Xcode bundle structure has this comment about the 'MacOS' directory: "MacOS (Required) Contains the application’s standalone executable code. Typically, this directory contains only one binary file with your application’s main entry point and statically linked code. However, you may put other standalone executables (such as command-line tools) in this directory as well."
- So, it looks like my question part 1 is answered but I am still unclear on part 2 of my question.
Edit/Update 2:
In the app sandboxing entitlement guide I have found this "To enable your app to connect to a server process running on another machine (or on the same machine), enable outgoing network connections. To enable opening a network listening socket so that other computers can connect to your app, allow incoming network connections."
This implies I could use TCP/gRPC but isn't definitive... I'll continue to chase a definitive answer!