macos – 我可以使用Mac App Store应用程序提交Go程序吗?

我正在尝试计划一个我想在Mac App Store上构建和发布的产品.

我在Go程序中有很多功能,我想从Electron应用程序中使用,理想情况下我想使用gRPC来连接它们.我担心这会被应用审核流程拒绝,任何人都可以告诉我:

>允许您的主应用程序“呼叫”捆绑的Go程序吗?
>如果是的话,我会被限制在stdin / stdout(我担心使用gRPC我的Go程序必须在启动时运行而且可能不被允许)?

我已经尝试通过阅读这个https://developer.apple.com/app-store/review/guidelines/来确定上述答案,但没有经验,希望你们有些人我无法确定.我想避免投入大量时间来构建它将被拒绝的方式.

编辑/更新:

更新 – 进行一些进一步的研究和思考,我重新阅读了App Store评论指南的这一部分“2.4.5(iii)他们可能无法自动启动或在启动时自动运行或未经同意登录或生成其他代码用户退出应用程序后未经同意继续运行的进程.“

>看一下,我运行的“其他代码”会得到同意(作为应用程序包结构/包的一部分),我会设计它以便在用户退出应用程序时关闭它.

我还发现an applications Xcode bundle structure有关于’MacOS’目录的评论:“MacOS
(必需)包含应用程序的独立可执行代码.通常,此目录仅包含一个二进制文件,其中包含应用程序的主入口点和静态链接的代码.但是,您也可以将其他独立的可执行文件(例如命令行工具)放在此目录中.“

>所以,看起来我的问题第1部分已经回答了,但我仍然不清楚我的问题的第2部分.

编辑/更新2:

app sandboxing entitlement guide中,我发现这个“要使您的应用程序能够连接到在另一台计算机上运行的服务器进程(或在同一台计算机上),请启用传出网络连接.
要启用网络侦听套接字以便其他计算机可以连接到您的应用程序,请允许传入的网络连接.“

这意味着我可以使用TCP / gRPC,但不是明确的……我将继续追逐一个明确的答案!

最佳答案 是.没有理由你不能提交使用go代码的应用程序 – 请参阅ios应用商店中的常春藤计算器(其规则甚至比mac应用商店更严格):

https://itunes.apple.com/us/app/ivy-big-number-calculator/id1012116478?mt=8

所以它不必是一个单独的二进制文件,你可以使用cgo例如使用C绑定调用Go代码.以下是Go的x平台UI库列表,其中一些使用电子.

https://github.com/avelino/awesome-go#gui

您还可以在为特定操作生成的应用程序中使用单独的命令行工具,只要在应用程序关闭后它不会继续运行. OS X上的许多应用程序都包含命令行工具,因此您的工具可以进入,然后应用程序就可以调用它.

您不允许做的是在提交后更改代码,或者运行与应用程序分开的后台进程,而不是在应用程序关闭时.

或者你可以让你的应用程序的大部分驻留在服务器上(用go编写),并让应用程序查询该服务器以获得响应 – 这可以让你在使用瘦包装器服务各种平台的同时将大部分代码保留在Go中每个平台(例如mac os,ios,android) – 如果您认为它可行,这可能值得考虑,因为它可以让您完成大部分工作,并且可以轻松地为所有平台更新您的应用程序而无需通过各种应用程序商店的看门人.如果你想到一个电子应用程序,并且应用程序依赖于来自网络的信息,那么这是可能的.

这在很大程度上取决于你的应用程序的性质以及它最适合哪种方法,但你勾勒出go应用程序的方法应该没问题.

点赞