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

bun*_*noi 5 macos go mac-app-store grpc electron

我正在尝试规划我想在 Mac App Store 上构建和发布的产品。

我想在一个电子应用程序中使用 Go 程序中的很多功能,理想情况下我想使用 gRPC 在它们之间进行交互。我担心这会被应用审查过程拒绝,谁能告诉我:

  1. 是否允许您的主应用程序“调用”捆绑的 Go 程序?
  2. 如果是这样,我是否会仅限于 stdin/stdout(我担心要使用 gRPC,我的 Go 程序必须在启动时运行,而这可能是不允许的)?

我试图通过阅读此https://developer.apple.com/app-store/review/guidelines/来确定上述问题的答案,但没有经验,希望你们中的一些人我无法确定。我想避免投入大量时间来构建一种会被拒绝的方式。

编辑/更新:

更新 - 做一些进一步的研究和思考,我重新阅读了 App Store 审查指南的这一部分“ 2.4.5 (iii) 他们可能不会在未经同意的情况下自动启动或在启动或登录时自动运行其他代码,也不会产生在用户退出应用程序后未经同意而继续运行的进程。 ”。

  • 看着它,我将运行的“其他代码”将获得同意(作为应用程序包结构/包的一部分),我会对其进行设计,以便在用户退出应用程序时它会关闭。

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

  • 所以,看起来我的问题第 1 部分得到了回答,但我对问题的第 2 部分仍然不清楚。

编辑/更新 2:

应用程序沙盒授权指南中,我发现了这个“要使您的应用程序能够连接到在另一台机器(或同一台机器运行的服务器进程,请启用传出网络连接。要启用打开网络侦听套接字,以便其他计算机可以连接到您的应用程序,允许传入网络连接。

这意味着我可以使用 TCP/gRPC 但不是确定的......我将继续寻求确定的答案!

Ken*_*ant 2

是的。您没有理由不能提交使用 go 代码的应用程序 - 请参阅 ios 应用商店中的 ivy 计算器(其规则比 mac 应用商店更严格):

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

因此它不必是单独的二进制文件,您可以使用 cgo 例如使用 C 绑定调用 Go 代码。以下是 Go 的 x 平台 UI 库的列表,其中一些使用 Electron。

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

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

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

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

这在很大程度上取决于您的应用程序的性质以及它的功能,哪种方法最合适,但是您概述的捆绑 Go 应用程序的方法应该没问题。