1

我们创建了一个包含两个不同包的 abc.pkg 安装程序;一个 def.mpkg(捆绑样式)和一个 ghi.pkg(平面包)。安装程序支持操作系统版本 10.5 及更高版本。我们已经对 abc.pkg 安装程序进行了数字签名,并根据Apple 的文档模拟了 Gatekeeper 的行为。

签名的 abc.pkg 通过 spctl 控制:

spctl -a -v --type install abc.pkg

返回:

abc.pkg:accepted
source: Developer ID

根据前面提到的文档,这意味着 Gatekeeper 将接受我们包的签名,但无法通过检查签名控制:

./check-signature ~/path_to_the_installer/abc.pkg

返回:

(c) 2014 Apple Inc. All rights reserved.
/path_to_the_installer/abc.pkg: code object is not signed at all
NO

这意味着签名不符合 Gatekeeper 要求。

我们已经在 Mac OS X 10.6 和 Mac OS X 10.10 上测试了 abc.pkg 安装程序,两次都安装成功。

究竟是什么意思 abc.pkg 不符合 Gatekeeper 的要求,以及检查签名工具失败的后果是什么?

我们不应该看到苹果的警告:

“abc.pkg”来自一个身份不明的开发者。您确定要打开它吗?

4

1 回答 1

0

您可以使用检查签名的详细选项来获取更多信息;它应该告诉你签名的哪一点是不可接受的。我遇到了一个问题,spctl 和 check-signature 都会通过,但应用程序仍然无法启动。使用 OSX 的控制台,您可以看到应用程序/包无法启动时发布的系统消息,以确定失败的确切原因。

在我的情况下,问题是应用程序试图加载一个未签名的库,在其资源之外,因此被拒绝。我使用终端 otool 命令检查依赖关系,并使用 install_name_tool 重定向任何引用外部库的库。我在应用程序的资源中有一个签名版本的库,一旦我将引用重定向到它,应用程序就会顺利打开。

于 2015-10-09T17:00:54.270 回答