gpt4 book ai didi

macos - 如何将 productsign 与包含较小签名 pkg 文件的 mpkg 一起使用?

转载 作者:行者123 更新时间:2023-12-01 22:33:39 25 4
gpt4 key购买 nike

我有一个名为 Parent.unsigned.mpkg 的父安装程序包,我想用 OS X productsign 对其进行签名。

文件 Parent.unsigned.mpkg 包含名为 A.pkgB.pkgC.pkg,它依次安装 Clang 编译的命令行二进制文件和 bash 包装器脚本:

./Parent.unsigned.mpkg/Contents/Packages/A.pkg
./Parent.unsigned.mpkg/Contents/Packages/B.pkg
./Parent.unsigned.mpkg/Contents/Packages/C.pkg

我注册了一个 Mac Developer 帐户,该帐户设置(在其他证书中)一个 ID 为 ABCD1234 的 Developer ID Installer 证书(这个 ID 实际上是不同的,并且特定于我的 Apple ID。)我使用 security 工具获取此 ID 值:

$ security find-certificate -a -c "Developer ID Installer" | grep "alis"
"alis"<blob>="Developer ID Installer: Foo B. Baz (ABCD1234)"

我用这个 ID 值对这些子包中的每一个进行签名,这似乎没有发生任何意外:

$ productsign --timestamp --sign ABCD1234 ./Parent.unsigned.mpkg/Contents/Packages/A.pkg ./Parent.unsigned.mpkg/Contents/Packages/A.signed.pkg
...
$ productsign --timestamp --sign ABCD1234 ./Parent.unsigned.mpkg/Contents/Packages/B.pkg ./Parent.unsigned.mpkg/Contents/Packages/B.signed.pkg
...
$ productsign --timestamp --sign ABCD1234 ./Parent.unsigned.mpkg/Contents/Packages/C.pkg ./Parent.unsigned.mpkg/Contents/Packages/C.signed.pkg
...

然后我将这些已签名的子包移回它们的原始文件名:

$ mv ./Parent.unsigned.mpkg/Contents/Packages/A.signed.pkg ./Parent.unsigned.mpkg/Contents/Packages/A.pkg
$ mv ./Parent.unsigned.mpkg/Contents/Packages/B.signed.pkg ./Parent.unsigned.mpkg/Contents/Packages/B.pkg
$ mv ./Parent.unsigned.mpkg/Contents/Packages/C.signed.pkg ./Parent.unsigned.mpkg/Contents/Packages/C.pkg

当我尝试 productsign 父包时,我收到以下警告消息:

$ productsign --timestamp --sign ABCD1234 ./Parent.unsigned.mpkg ./Parent.signed.mpkg
productsign: preparing "Parent.unsigned.mpkg" for signing ...
productsign: Using timestamp authority for signature
productsign: warning: component package "A.pkg" not found inside "Parent.unsigned.mpkg" and must be signed explicitly
productsign: warning: component package "B.pkg" not found inside "Parent.unsigned.mpkg" and must be signed explicitly
productsign: warning: component package "C.pkg" not found inside "Parent.unsigned.mpkg" and must be signed explicitly
productsign: Wrote signed product archive to ./Parent.signed.mpkg

当我尝试验证安装程序是否已签名时,我收到一条拒绝消息:

$ spctl -a -v --type install ./Parent.signed.mpkg 
./Parent.signed.mpkg: rejected

我正在使用 Apple 概述的说明 herehere .

未签名的安装程序可以正常工作,但它需要绕过 OS X Gatekeeper。因此安装包和内容看起来是正确的(或者至少工作正常)。

我遗漏了哪些步骤或程序来生成可与 OS X Gatekeeper 配合使用的数字签名安装程序?

最佳答案

我用了Packages.app创建包项目。

Packages.app内,我将项目类型从 Bundle 更改为至 Flat并重建安装程序存档。

然后我继续 productsign如上所述通过命令行执行步骤,除了我只需要签署父 pkg文件生成一个有效的、签名的安装程序(我没有签署子包)。

使用 pkgutil --flatten尝试压平 mpkg命令行上的 bundle 输出最终破坏了安装程序——我不得不将项目类型从 Bundle 更改为至 FlatPackages.app 内并在该应用程序中重建安装程序,并在 Packages.app 之外签署平面安装程序文件.

关于macos - 如何将 productsign 与包含较小签名 pkg 文件的 mpkg 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28389664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com