我使用 Packages 为 Mac OS X LaunchDaemon 创建 .pkg 安装程序。
在安装过程中,我希望用户能够为配置文件提供一些值。生成的文件是一个简单的文本配置文件,运行时将由 shell 脚本获取。
是否有一些工具可以轻松创建带有几个文本字段的填写表单?这将在安装过程中呈现给用户,然后保存提供的值(或使它们可用于安装后 shell 脚本)。
如果没有这样的工具,我想我可以使用 shell 和终端中的一些
read
来完成。但在这种情况下,如何从我的安装后脚本启动交互式 shell 脚本?
不确定,您可以使用 Distribution.dist XML 文件来完成。它是 JavaScript,但我没有仔细查看定义,因为它在我当前版本的 Safari 上显示出来的都是乱码。
最简单的方法是创建一个从脚本运行的小型应用程序对话框,您可以完全控制该对话框。
很抱歉回答晚了,我也遇到过你同样的情况。似乎无法自定义 Apple 安装程序以显示“InnoSetup 样式”等自定义表单。
通常,最好进行无参数安装,一旦安装了应用程序,如果尚未配置这些参数,则在第一次启动时可能会要求您配置这些参数。在你的情况下,这似乎不可能,所以你可以这样做:
您可以在捆绑包中包含一个临时的小应用程序,该应用程序将放置在临时路径中并由安装后脚本启动,该脚本将打开一个包含自定义表单的浮动窗口。 这个小应用程序可以显示一个表单,然后它可以创建主应用程序所需的所有配置文件。
这是我的文件夹树:
.
├── distribution.xml
├── root
│ ├── Applications
│ │ └── MyApp.app
│ │ └── Contents
│ │ ├── Info.plist
│ │ ├── MacOS
│ │ │ └── MyApp
│ │ ├── PkgInfo
│ │ ├── Resources
│ │ └── _CodeSignature
│ │ └── CodeResources
│ └── Library
│ └── Application Support
│ └── MyApp
│ └── InstallerHelper.app
│ └── Contents
│ ├── Info.plist
│ ├── MacOS
│ │ └── InstallerHelper
│ ├── PkgInfo
│ ├── Resources
│ └── _CodeSignature
│ └── CodeResources
└── scripts
└── postinstall
postinstall
内容
#!/bin/bash
/Library/Application\ Support/MyApp/InstallerHelper.app/Contents/MacOS/InstallerHelper
构建脚本:
pkgbuild --root ./root --scripts ./scripts --identifier com.my.app --version 0.0.1 --ownership recommended --sign ${"INSTALLER-CERT"} --timestamp ./my-app.pkg
productbuild --distribution ./distribution.xml --package-path ./my-app.pkg --version 0.0.1 --sign ${"INSTALLER-CERT"} --timestamp MyApp.pkg
此时您可以启动 MyApp.pkg 安装程序:
注意:虽然此解决方案允许您自定义安装,但如果需要通过软件配置工具进行部署,则可能会导致问题。由于 macOS 安装程序不允许您向安装程序提供参数,因此中间应用程序(本例中为 InstallerHelper.app)必须管理静默安装,可能是通过在开始安装之前读取放置在特定路径中的文件并将它们用作配置。