我正在尝试为 macOS (Monterey) 上的 CLI 创建一个 .pkg 安装程序。我遇到过pkgbuild和productbuild。
它们已经安装在我的 mac 上。
我在哪里可以阅读有关这些 CLI 功能的更多信息?(不仅仅是如何使用)。
两者有什么区别?
我从这个堆栈溢出线程中遇到了它们: Making macOS Installer Packages which are Developer ID ready
我正在将我们的安装程序从PackageMaker移植到pkgbuild,我正在尝试将默认安装位置设置为当前用户的主目录,并且仍允许用户在系统范围内安装.
在我的分发文件中,我有enable_currentUserHome ="true"和enable_localSystem ="true",它正确地允许用户"为这台计算机的所有用户安装"或"仅为我安装".但是,我希望默认情况下选择"仅为我安装".
pkgbuild有一个"--install-location"的命令行选项,手册页中指的是默认位置,但是没有提到如何指定主目录.我试过"〜"和"$ HOME"但没有运气.有一些我不知道的宏吗?
有没有人知道如何告诉pkgbuild默认安装在当前用户的主目录下?
提前致谢!
-Owen
我正在尝试创建一个Mac安装程序包,pkgbuild并且productbuild可以选择将1个软件包安装到4个位置,具体取决于分发定义xml文件中列出的安装程序选项的结果.
不幸的是,我找不到一种自定义Distribution.xml安装包不止一次的方法.
我能看到的唯一选择是捆绑4个相同的包,但具有单独的安装位置; 但这是不可取的,因为它会使我的安装程序不必要地大.
有没有其他方法来实现这种自定义行为?
我已使用pkg将 Node.js 脚本打包为可执行文件。随着 macOS Catalina 版本的发布,所有软件都应经过 Apple 公证。由于 Apple 只允许.dmg,.pkg或.app文件进行分发。我使用pkgbuild创建 OS X 安装程序并尝试以下操作:
.pkg:它失败并出现错误:The binary is not signed.尽管它是代码签名的。main executable failed strict validation。我在 GitHub 上发现了类似的pkg问题。我尝试了多个 npm 模块,包括nexe、encloseJS ,但没有成功。
有没有其他选择,或者我应该将本机 Node.js 二进制文件与我的脚本捆绑到 pkg 安装程序中,以便轻松进行公证?
我的产品安装程序使用pkgbuild和productbuild可以很好地工作。但是,现在我试图弄清楚如何使我的安装程序也可以充当卸载程序。通过修改我的distribution.xml文件,我可以为用户显示卸载选择,如下所示:
<choices-outline>
<line choice="install"/>
<line choice="uninstall"/>
</choices-outline>
<choice id="install" visible="true" title="Install" description="Installation description goes here">
<pkg-ref id="com.prosc.RemoteExecution.install.pkg">#installer.pkg</pkg-ref>
</choice>
<choice id="uninstall" visible="true" title="Uninstall" description="Uninstaller description goes here" start_selected="false">
<pkg-ref id="com.prosc.RemoteExecution.uninstall.pkg">#installer.pkg</pkg-ref>
</choice>
Run Code Online (Sandbox Code Playgroud)
但是,当他们选择卸载时,我需要安装后脚本以某种方式知道他们选择了哪种选择。我看不到安装后脚本知道的任何方式-环境变量中没有任何内容可以表明这一点,也没有包含在传递给我的脚本的参数中。
在我看来,我可以编写一个单独的卸载程序包,并使用其自己的单独的后安装脚本,然后将该程序包作为整个产品的一个组件包含在内,但这似乎需要大量额外的安装工作。
如果基于用户做出的安装选择存在细微的行为差异怎么办?我是否需要为每个选择单独制作包装组件?
有没有不需要额外组件包的好的解决方案,还是我应该单独制作单独的组件包以进行安装/卸载?
我正在为我的 OSX 应用程序创建一个 .pkg 安装程序,但我无法弄清楚如何设置背景图像。
我在我的构建脚本中创建我的安装程序,如下所示:
pkgbuild --root $APP_FOLDER --identifier "com.company.product" $FINAL_PKG
Run Code Online (Sandbox Code Playgroud)
这很好用,但我无法在手册页中找到有关设置背景图像的任何信息。我见过具有自定义背景图像的软件包安装程序,如何设置它?
编辑:
这是具有自定义背景的软件包安装程序的屏幕截图:

我正在使用 pkgbuild 和 Productbuild 构建安装程序,并且我希望该过程的一部分涉及询问用户一些简单的问题。这些问题可以通过复选框(是/否)或小型单行文本输入字段来回答。
一旦提出这些问题,我想将它们提供给安装后脚本。
对于更多上下文,我的产品是一组命令行工具,将位于 /usr/local/X 中,其中 X 是我的产品的名称。然后,运行一个简单的安装后脚本来初始设置一些内容。pkgbuild 已经很好地处理了这个问题。我真正想要的是为安装后脚本提供我的问题的答案,也许在环境变量中,这样它就可以进行相应的设置。
我有以下两个 .pkg 文件:
分别使用以下两个命令构建:
pkgbuild --identifier <my identifier> --version 1.3.0 --root ./MyAppBundle --install-location '/Applications/MyApp test' --component-plist MyAppBundle.plist MyApp-v1_3_0.pkgpkgbuild --identifier <my identifier> --version 1.2.0 --root ./MyAppBundle --install-location '/Applications/MyApp test' --component-plist MyAppBundle.plist MyApp-v1_2_0.pkg在 MyAppBundle.plist 文件中,我有这个:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>BundleHasStrictIdentifier</key>
<true/>
<key>BundleIsRelocatable</key>
<true/>
<key>BundleIsVersionChecked</key>
<true/>
<key>BundleOverwriteAction</key>
<string>upgrade</string>
<key>RootRelativeBundlePath</key>
<string>MyApp.app</string>
</dict>
</array>
</plist>
Run Code Online (Sandbox Code Playgroud)
如您所见BundleIsVersionChecked,设置为 true,但是当我在 MyApp-v1_3_0.pkg 之后运行 MyApp-v1_2_0.pkg 时,它很高兴地降级了。
如何阻止它降级?
我正在将守护进程从 Linux 移植到 OSX。守护进程本身是用 C# 编写的,并用 Mono 执行。我正在尝试为安装到目录“/Library/MyAppSuite/MyDaemon”中的守护程序创建一个安装程序包,并包含典型的 bin、lib 等目录。然后将符号链接安装到 /Library/LaunchDaemons 以使其在启动时启动。在 pkgbuild 步骤中:
pkgbuild --root /tmp/MyDaemonComponent.dst --component-plist MyDaemonComponent.plist MyDaemonComponent.pkg --install-location /Library/MyAppSuite/MyDaemon
Run Code Online (Sandbox Code Playgroud)
我收到错误消息“不是有效的捆绑包”。
我如何创建包,以便它安装到正确的目录中并运行安装后脚本?拥有安装向导(不允许更改安装位置)也很好。
我正在尝试构建一个有背景的 pkg。我正在研究 ElCapt。我成功地用背景图像构建了 pkg,它是这样的:
部分背景图像隐藏在欢迎说明下方。
如何使这个透明,以便我可以看到欢迎说明部分下方的图像隐藏部分?
pkgbuild ×10
macos ×8
productbuild ×5
installation ×2
code-signing ×1
deployment ×1
installer ×1
mono ×1
node.js ×1
notarize ×1
package ×1
xcode ×1