【问题标题】:Can I submit a Go program with a Mac App Store app?我可以使用 Mac App Store 应用程序提交 Go 程序吗?
【发布时间】:2018-02-28 15:18:53
【问题描述】:

我正在尝试计划一个我想在 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,但不是确定的……我会继续寻找确定的答案!

【问题讨论】:

标签: macos go electron grpc mac-app-store


【解决方案1】:

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

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 中完成大部分工作,让您的应用在所有平台上轻松更新,而无需通过各种应用商店的看门人。如果您无论如何都在考虑电子应用程序,并且该应用程序依赖于来自网络的信息,那么这是可能的。

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

【讨论】:

  • 谢谢,我已经调查了所有这些。使用电子的 UI 库实际上在后台使用 TCP,所以我不妨保持简单并使用 gRPC(让我回到最初的问题第 2 部分 - 它正在演变为“我可以让节点进程通过 TCPIP 与我的主应用程序?')。有一个 nw.js 看起来可以工作,但我发现 nw.js 文档不如电子,看起来电子是未来创新的更安全的选择。
  • 我很难理解 C 绑定 (cgo) 如何帮助我从电子调用 go?我可以看到 go 现在允许使用 buildmode=c-shared 构建与 C 兼容的动态链接库。这允许任何可以调用 C 动态库的语言调用 go 意味着节点可以使用 node-ffi 调用它,但是 go 动态链接库功能看起来在 Windows 或 OS X 上不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多