macos - 使用 Productbuild 对 mac 应用程序进行签名和存档,无需使用 xcode 在 Mac App Store 之外分发应用程序

标签 macos code-signing pkgbuild productbuild

我是 MAC 应用程序开发新手,正在开发使用 Zoom Mac SDK 的项目,但该 SDK 不支持使用 Xcode 存档,因此我需要使用 Zoom 支持中心建议的其他工具进行存档。根据他们的回复,应用程序可以使用 pkgbuild/pkgutil/productbuild 进行存档,但我不知道为我的 Mac 应用程序创建 archive/pkg/dmg 文件的确切步骤。

另请让我知道我需要创建哪个文件扩展名以便用户从网站下载我的应用程序。

我正在使用“开发人员 ID 应用程序”和“开发人员 ID 安装程序”证书来签署我的构建,但不知道如何在不使用 Xcode 的情况下创建构建,因为使用 Xcode,我收到第三方框架的错误,因为“代码对象是根本没有签名”。

感谢您的大力帮助。

最佳答案

首先,您需要 pkgbuild 和 Productbuild,才能做一些富有成效的事情。

您可以在此处指定根文件夹、标识符、版本、安装位置、标牌和安装后脚本。

例如:

pkgbuild --root "${ROOTFOLDER}" \
--identifier "${IDENTIFIER}" \
--version ${VERSION} \
--install-location "/" \
--sign "${IDENTITY}" \
--scripts '${SCRIPT}' \
"${PKGNAME}.pkg"

在 ${ROOTFOLDER} 中,您可以控制文件/文件夹,就像在本地计算机上的“/”之后一样。 例如,如果您想将“xy.app”放入/Applications,您可以在${ROOTFOLDER}内创建一个“Applications”文件夹并将xy.app放入其中。当您安装该软件包时,在计算机上的“/Applications”文件夹中,将会有 xy.app。 您还可以将文件复制到/Library 或其他位置,只需在指定的根文件夹中创建文件夹即可。

当您想要安装任何 .pkg/.dmg 或 .sdk 时,您可以创建一个在 --scripts ${SCRIPTSFOLDER} 下指定的脚本文件夹,并在其中创建一个“安装后”文件。

安装后文件将包含将与您的软件包一起执行的内容,例如安装另一个 .pkg 或 .sdk,它们将位于您的 ${ROOTFOLDER} 内。

例如,将多个 .pkg' 文件放入 ${ROOTFOLDER}/Packages 中。在您的根文件夹中,将创建/Packages 文件夹。意味着,在安装后您可以说:

sudo installer -pkg /Packages/anotherPackageOrApp.pkg target /

完成此操作后,您将获得一个简单的包。然而,您真正想要的不仅仅是这个。

使用productbuild,您可以创建一个分发文件:它包含产品存档的所有配置,包括产品许可证、产品自述文件、组件包列表、约束(例如最低操作系统版本)。

继续执行以下操作:

productbuild --synthesize --package "${PKGNAME}.pkg" distribution.dist

现在您已经从包中取出了 distribution.dist,您可以根据需要对其进行编辑。 将其重新构建在一起:

productbuild --distribution distribution.dist --scripts "${SCRIPTS}" --sign "${IDENTITY}" --package-path "${PKGNAME}.pkg" --resources . --version ${VERSION} "${PKGNAME}_New.pkg"

现在您已获得最终签名的包。包含可以通过安装后文件安装的 .sdk、.pkg 和 .dmg 的位置,或者只是复制到要安装 pkg 的计算机上的目录。

问候

关于macos - 使用 Productbuild 对 mac 应用程序进行签名和存档,无需使用 xcode 在 Mac App Store 之外分发应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48077574/

相关文章:

windows-8 - 用于侧面加载的代码签名 Windows 商店应用程序(使用 GoDaddy 证书)

macos - 使用裸可执行文件创建 .pkg 安装程序

macos - 使用shell脚本编辑plist文件

python - 在 Mac 上使用 Python 和 Firefox 的 selenium webdriver 问题

objective-c - 如何在 macOS 上取消反斜杠?

android - Ios dynamics crm 移动应用 ssl 证书

macos - Mac 上的监控模式 - 使用 Scapy

ios - 代码签名错误 : No unexpired provisioning profiles found that contain any of the keychain's signing certificates

ios - 自更新到 Xcode 13 以来,我收到一个 codsign 错误