签名abc.pkg通过spctl控件并且检查签名控制失败。检查签名工具失败的后果?

时间:2015-04-02 10:46:55

标签: macos osx-yosemite code-signing osx-gatekeeper

我们创建了一个包含两个不同包的abc.pkg安装程序;一个def.mpkg(包样式)和一个ghi.pkg(扁平包)。安装程序支持OS 10.5及更高版本。 我们已经对abc.pkg安装程序进行了数字签名,并根据Apple's documentation我们模拟了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的要求,哪些是检查签名工具失败的后果?

我们不应该看到Apple的警告:

  

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

1 个答案:

答案 0 :(得分:0)

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

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