我们创建了一个包含两个不同包的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”来自一位身份不明的开发者。你确定你要 打开它?
答案 0 :(得分:0)
您可以使用check-signature的详细选项来获取更多信息;它应该告诉你签名的哪一点是不可接受的。我遇到了spctl和check-signature都会通过的问题,但应用仍然无法启动。使用OSX的控制台,您可以看到在应用程序/程序包无法启动时发布的系统消息,以确定失败的确切原因。
在我的情况下,问题是该应用程序试图在其资源之外加载未签名的库,因此被拒绝。我使用终端otool命令检查依赖项,使用install_name_tool重定向任何引用外部库的库。我在应用程序的资源中有一个已签名的库版本,一旦我将引用重定向到它,应用程序就会顺利打开。