macos - 我可以提交带有 Mac App Store 应用程序的 Go 程序吗?

标签 macos go electron grpc mac-app-store

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

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

  1. 是否允许您的主应用“调用”捆绑的 Go 程序?
  2. 如果是,我是否会被限制为 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 应用程序商店上的 Ivy 计算器(其规则甚至比 mac 应用程序商店更严格):

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

所以它不必是一个单独的二进制文件,例如,您可以使用 cgo 来使用 C 绑定(bind)调用 Go 代码。这是 Go 的 x 平台 UI 库列表,其中一些使用 electron。

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

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

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

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

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

关于macos - 我可以提交带有 Mac App Store 应用程序的 Go 程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46307201/

相关文章:

c++ - 在 Mac OS 上测量 deltatime 毫秒数的最佳方法?

json - 为什么 go 将 JSON 视为 []byte 而不是字符串?

reactjs - 为什么我在运行 ESLint 时得到 "Definition for rule ' import/no-extraneous-dependencies' was not found”?

macos - 在 Mac 上使用 docker。是否可以使用 docker-machine 启动 docker 守护进程并传入参数?

Linux 中的 python 鸢尾花

gorp PreUpdate 方法更新非自愿列

windows - 如何从.msi安装程序转到 Electron 生成器(nsis)

javascript - Electron-vue : 'compute:' does not work

xcode - mac osx 最近的项目,即使我从 5 之类的首选项中更改它,它也会再次将其重置为无

c# - Go语言中Char到Ascii int的转换