2015-04-02 16 views
1

我們創建了一個包含兩個不同包的abc.pkg安裝程序;一個def.mpkg(包裝樣式)和一個ghi.pkg(扁平包裝)。安裝程序支持OS版本10.5及以上。 我們對abc.pkg安裝程序進行了數字簽名,並基於Apple's documentation我們模擬了Gatekeeper的行爲。已簽名abc.pkg傳遞spctl控件並且未通過簽名簽名控制。檢查簽名工具失敗的後果?

簽署的abc.pkg經過SPCTL控制:

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

回報:

abc.pkg:accepted 
source: Developer ID 

了基於前面提到的文檔上意味着看門人會接受我們的包的簽名,但是未通過檢查 - 簽名控制:

./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 

這意味着簽名不符合關守的要求。

我們已經在Mac OS X 10.6和Mac OS X 10.10上測試過abc.pkg安裝程序,並且安裝過程都是成功的。

究竟是什麼意思abc.pkg不符合關守的要求,哪些是檢查簽名工具失敗的後果?

我們不應該看到蘋果的警告:

「abc.pkg」 是從一個身份不明的開發者。你確定要打開 嗎?

回答

0

您可以使用check-signature的詳細選項來獲取更多信息;它應該告訴你簽名的哪一部分是不可接受的。我遇到了spctl和check-signature會通過的問題,但該應用仍然無法啓動。使用OSX的控制檯,您可以看到應用程序/軟件包無法啓動時發佈的系統消息,以確定失敗的確切原因。

在我的情況下,問題是應用程序試圖加載一個未簽名的庫,它的資源之外,因此被拒絕。我使用terminal otool命令檢查依賴關係,並使用install_name_tool重定向引用外部庫的任何庫。我在應用程序資源中擁有一個簽名版本的庫,一旦我將引用重定向到該應用程序,該應用程序就會順利打開。