首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用包含较小签名pkg文件的mpkg产品标识?

如何使用包含较小签名pkg文件的mpkg产品标识?
EN

Stack Overflow用户
提问于 2015-02-08 01:45:48
回答 1查看 2K关注 0票数 2

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

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

代码语言:javascript
复制
./Parent.unsigned.mpkg/Contents/Packages/A.pkg
./Parent.unsigned.mpkg/Contents/Packages/B.pkg
./Parent.unsigned.mpkg/Contents/Packages/C.pkg

我注册了一个Mac帐户,它使用ID ABCD1234设置开发人员ID安装程序证书(此ID实际上与我的Apple不同,并且是特定于我的Apple)。我使用security工具获得这个ID值:

代码语言:javascript
复制
$ security find-certificate -a -c "Developer ID Installer" | grep "alis"
    "alis"<blob>="Developer ID Installer: Foo B. Baz (ABCD1234)"

我用这个ID值在每个子包上签名,这个ID值似乎没有发生意外:

代码语言:javascript
复制
$ 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
...

然后,我将这些签名的子包移回原来的文件名:

代码语言:javascript
复制
$ 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父包时,我会收到以下警告消息:

代码语言:javascript
复制
$ 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

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

代码语言:javascript
复制
$ spctl -a -v --type install ./Parent.signed.mpkg 
./Parent.signed.mpkg: rejected

我正在使用苹果的方向概述这里这里

未签名的安装程序可以正常工作,但它需要绕过OS网关管理员。因此,安装程序包和内容似乎是正确的(或至少正确工作)。

我缺少哪些步骤或过程来生成与OS网关管理员一起工作的数字签名安装程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-08 05:44:53

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

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

然后,我通过上面描述的命令行继续执行productsign步骤,只不过我只需要对父pkg文件签名才能生成一个工作的、签名的安装程序(我没有对子包进行签名)。

使用pkgutil --flatten试图平平命令行上的mpkg包输出,最终导致安装程序崩溃,- I不得不将项目类型从Bundle更改为Packages.app中的Flat,并在应用程序中重新构建安装程序,并在Packages.app之外对平面安装程序文件进行签名。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28389664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档