macos - 如何分发 OSX cli/server 应用程序

标签 macos go

我正在构建一个可以在 golang 中的 osx 服务器模式下运行的 cli 应用程序。我来自服务器世界,不知道如何正确分发 osx 的消费者 cli 工具。 cli 可以作为服务运行,这可以通过 launchd 轻松实现。

启动配置:

<plist version="1.0">
    <dict>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>focus-daemon</string>
        <key>RunAtLoad</key>
        <true />
        <key>Program</key>
        <string>/usr/local/bin/focus</string>
  </dict>
</plist>

构建和运行也很简单:

go build main.go
sudo cp main /usr/local/bin/focus
rm main
sudo chown root /usr/local/bin/focus
sudo chmod 4555 /usr/local/bin/focus
cp focus.plist ~/Library/LaunchAgents/com.21stio.focus.plist
launchctl load ~/Library/LaunchAgents/com.21stio.focus.plist

构建过程需要 sudo 在二进制文件上设置 sbit。

我不希望用户必须运行 .sh 脚本。也许我可以为此使用 brew 和/或 DMG。但我不知道如何将 Launchd 配置 放在正确的位置。

最佳答案

正如评论中所建议的那样,安装程序 pkgs 通常是使用此类软件的方式。如果您在 Mac 上手动安装过设备驱动程序、操作系统更新和其他较低级别的软件,您可能对它们很熟悉。

您还可以使用命令行实用程序生成它们,并且不一定需要使用 pvg 的第三方应用程序在评论中建议。 This answer是一个很好的起点。使用命令行工具还可以让您在标准构建过程中自动构建包。

请注意,Apple 自己的旧“PackageMaker”GUI 工具不再适用于较新版本的 macOS/OSX,我强烈建议您不要使用它。

关于macos - 如何分发 OSX cli/server 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47249674/

相关文章:

jquery - e.owlCarousel 不是 linux 主机上 yarn encore 生产后的功能

swift - 通过 super.validateMenuItem( :) generates Swift exception

objective-c - 如何禁用 NSTextView 的 NSScrollView 滚动条上的鼠标悬停展开效果?

go - Golang 中的 echo 命令

go - 如何加密可以在固定期限内解密的数据

python - 以压缩二进制格式在golang中存储矩阵

python-3.x - 在 MacOs 上卸载 python3

ruby - 无法在 Lion 上构建 Ruby 1.9.3

go - 接口(interface){}是什么意思?

loops - 如何在 for 循环中基于结构声明变量