如何为 OSX 签署 DMG 和安装程序

How to sign DMG and installer for OSX

我已经为此苦苦挣扎了很长一段时间,如果有人能帮助我理解这里发生的事情,我将不胜感激。

我有一个 install4j 项目,它为 Windows 和 OSX 创建安装程序包。我有 Windows 的常规签名证书,这没有问题。我也有 Apple 开发人员证书。我已将私钥从我的钥匙串导出到 p12 文件。我已经测试了生成的 p12 文件以确保它适用于密钥库密码。该证书绝对有效,因为我今天(再次)刚刚创建了它。而且,当我 运行 通过 Maven 构建安装程序时,它甚至看起来一切正常:

[INFO] Compressed media file 'Mac OS X Single Bundle':
[INFO]   Compressing files
[INFO]   Generating VM options file vmoptions.txt.
[INFO]   Signing installer
[INFO]   Signing DMG
[INFO]   Moving media files to media directory /Users/....
[INFO]   The name of the media file is my-app_macos_1_1_1.dmg.
[INFO]   The size of the media file is 4.8 MB

这看起来不错,只是安装程序和 dmg 没有签名,或者至少没有以有用的方式签名:

$ spctl -a -v target/media/my-app_macos_1_1_1.dmg
target/media/my-app_macos_1_1_1.dmg: CSSMERR_TP_CERT_EXPIRED
$ spctl -a -v /Volumes/my-app/My\ Application\ Installer.app
/Volumes/my-app/My Application Installer.app: CSSMERR_TP_CERT_EXPIRED

证书未过期:

Alias name: mac developer: me myself (my company, inc.)
Creation date: Mar 6, 2017
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: C=US, O="Radiologics, Inc.", OU=K865L34KBQ, CN=Mac Developer: Me Myself (XXXX), UID=YYYY
Issuer: CN=Apple Worldwide Developer Relations Certification Authority, OU=Apple Worldwide Developer Relations, O=Apple Inc., C=US
Serial number: 30544da25ea67233
Valid from: Mon Mar 06 14:46:17 CST 2017 until: Tue Mar 06 14:46:17 CST 2018

但是无论我直接从 install4j 还是通过 Maven 插件构建 dmg/installer,结果都是无效的。我总是得到类似的东西:

$ codesign -dvvv target/media/my-app_macos_1_1_0.dmg
Executable=.../target/media/my-app_macos_1_1_0.dmg
Identifier=my-app_macos_1_1_0
Format=disk image
CodeDirectory v=20100 size=173 flags=0x0(none) hashes=1+2 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha256=XXXXXX
Hash choices=sha256
CDHash=XXXXX
Signature size=8641
Authority=(unavailable)
Info.plist=not bound
TeamIdentifier=not set
Sealed Resources=none
Internal requirements count=1 size=36

为了让我们能够分发这个应用程序,我们真的需要让它工作,但我已经花了好几天的时间来解决这个问题,但没有取得任何进展。如果有人能阐明这里发生的事情,我将不胜感激。

有两种不同的证书可用于在 Mac App Store 之外分发应用程序。

一个应用程序证书和一个安装程序证书。

检查您的证书(您可以通过隐藏在 /Application/Utilities 中的钥匙串访问应用程序中的 "My Certificates" 来完成)以确保您使用的是安装程序证书(在我的机器上名称为它是 "Developer ID Installer: Michael Dautermann"。这与您用于对应用程序进行代码签名的 "Developer ID Application" 证书是分开的。

更多信息can be seen here

至于 DMG,我原来的答案是 "can't do that",但实际上从 MacOS 10.11.5 开始,你 CAN签署 dmg 文件。可以在 "macOS code signing in depth" 参考指南的 "Signing Disk Images" 部分中查看更多信息。您将使用您的 Developer ID Application 证书。