2016-09-30 22 views
2

我的MacOS應用程序是codesigned並運行在某些計算機上,但在另一個失敗,因爲關守運行彈出「{App}無法打開,因爲開發人員的身份無法確認。」驗證MacOS的應用程序,通過協同設計,SPCTL和籤簽名,但無法運行「因爲開發者的身份無法確認」

我想分發錯誤的.dmg之前檢測build機器上的這個問題,所以我看着蘋果的Checking Gatekeeper ConformanceExamining a Code Signature文檔,其中討論codesignspctlcheck-signature。令人困惑的是,所有這些工具都報告說,.app是由我的開發者帳戶簽署的。

$ codesign -v --strict --deep --verbose=2 App.app 
App.app: valid on disk 
App.app: satisfies its Designated Requirement 

$ codesign -d --deep --verbose=2 -r- App.app 
Executable=/Applications/App.app/Contents/MacOS/App 
Identifier=com.example.app 
Format=app bundle with Mach-O thin (x86_64) 
CodeDirectory v=20200 size=196 flags=0x0(none) hashes=3+3 location=embedded 
Signature size=8539 
Authority=Developer ID Application: Company, Inc. (XXXXXXXXXX) 
Authority=Developer ID Certification Authority 
Authority=Apple Root CA 
Timestamp=Sep 22, 2016, 7:32:19 PM 
Info.plist entries=21 
TeamIdentifier=XXXXXXXXXX 
Sealed Resources version=2 rules=12 files=10708 
Nested=Frameworks/Squirrel.framework 
Nested=Frameworks/App Helper NP.app 
Nested=Frameworks/App Helper.app 
Nested=Frameworks/App Helper EH.app 
Nested=Frameworks/Mantle.framework 
Nested=Frameworks/ReactiveCocoa.framework 
Nested=Frameworks/Electron Framework.framework 
Internal requirements count=1 size=172 
designated => identifier "com.example.app" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = XXXXXXXXXX 

$ spctl --assess -vv App.app 
App.app: accepted 
source=Developer ID 
origin=Developer ID Application: Company, Inc. (XXXXXXXXXX) 

$ check-signature App.app 
(c) 2014 Apple Inc. All rights reserved. 
YES 

的證書,標識&檔案網站顯示未過期的「開發者ID應用程序」我的帳戶「開發者ID安裝」證書。我從未撤銷任何Mac簽名證書。我還檢查了該應用的Info.plist中的CFBundlePackageType設置爲APPL

這是怎麼回事?


更新:從埃爾卡皮坦升級的Mac塞拉利昂解決了這個問題。如果有用戶遇到問題,我仍然有興趣瞭解問題的原因。

+0

的設定,看門人設置爲? –

+0

它被設置爲接受來自Mac App Store和識別開發者的應用程序。從El Capitan升級到Sierra神奇地解決了這個問題,也許是OS X的一個bug。 – ide

+1

我之前看到過這種行爲,並且重啓機器會修復它,所以我會同意這是OS X中的一個bug。 – TheDarkKnight

回答

0

在我的情況下,這個消息出現了,當一個嵌入式第三方框架有一個糟糕的運行路徑設置:在構建設置LD_RUNPATH_SEARCH_PATHS確實引用了它不被允許的東西。

這這裏 https://developer.apple.com/library/content/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG207

如果應用程序使用@rpath或絕對路徑 外鏈接到一個動態庫的應用程序的

蘋果的文檔,應用程序將通過關守拒絕。

,他們甚至狀態:

無論是協同設計還是SPCTL工具會顯示錯誤。錯誤 只會出現在系統日誌中。

的解決方案是修改第三方框架的東西的標準是這樣的:

$(inherited) @executable_path/../Frameworks @loader_path/Frameworks

+0

和https: //stackoverflow.com/a/37800961/292145提供了很好的背景信息。 – Klaas

相關問題