我們的應用已被代碼簽名。我們的Apple證書是最新的。我們的應用以前的版本運行得很好。網守與證書的隔離問題
但是,當用戶下載DMG時,在某些Mac上應用程序被隔離,但對於大多數用戶而言,則不是。因此,有些用戶可以打開應用程序,而其他用戶可以獲得「X.app無法打開,因爲開發人員的身份無法確認。」
幸運的是,我在這裏有2個Mac有隔離問題,但我們無法找到這些Mac和其他Mac之間的區別。有其他人遇到這個問題嗎?
我們的應用已被代碼簽名。我們的Apple證書是最新的。我們的應用以前的版本運行得很好。網守與證書的隔離問題
但是,當用戶下載DMG時,在某些Mac上應用程序被隔離,但對於大多數用戶而言,則不是。因此,有些用戶可以打開應用程序,而其他用戶可以獲得「X.app無法打開,因爲開發人員的身份無法確認。」
幸運的是,我在這裏有2個Mac有隔離問題,但我們無法找到這些Mac和其他Mac之間的區別。有其他人遇到這個問題嗎?
我想你可能會對隔離,代碼簽名和Gatekeeper的工作方式感到困惑。您看到的錯誤來自Gatekeeper,並指出兩種不同的(獨立的)事物:1)應用程序被隔離(與下載方式有關,而不是如何簽名)以及2)未登錄一種符合安全性&隱私首選項中定義的關守策略的方式。讓我更詳細地解釋這兩件事。
隔離區是應用程序(或其所在的磁盤映像)被下載的結果。當您使用瀏覽器下載文件時,瀏覽器將爲其添加com.apple.quarantine
屬性,表明它來自不可信網絡源。其他類型的互聯網應用程序(電子郵件,聊天等)也應該將此屬性附加到下載的文件。
但並非所有的網絡下載方法都會應用隔離屬性。例如,使用Finder通過文件共享連接(例如AFP或SMB)複製文件不會將其標記爲處於隔離狀態。此外,命令行工具(如curl
和wget
)將不會應用隔離。
就你而言,當你下載.dmg文件時,它會被標記爲隔離;當您打開它時,該屬性會傳播到其內容中,因此該應用程序也會被標記爲處於隔離狀態(如果將其複製到/ Applications中,則會將隔離屬性與其他所有內容一起復制)。
要檢查文件是否被隔離,請使用其上的ls [email protected]
並查找com.apple.quarantine
屬性。您在不同計算機之間看到的差異完全有可能與磁盤映像的下載方式有關,因此應用程序是否被隔離。
當您打開一個隔離的應用程序時,Gatekeeper會檢查它是否符合您計算機的安全策略子系統。 這個是代碼簽名進入它的地方。您可以在系統偏好設置 - >安全&隱私窗格 - >常規選項卡 - >「允許下載應用程序」或使用spctl
命令行工具查看和更改您的策略。默認策略是允許來自Mac App Store(即使用Apple的應用商店密鑰簽名)或已識別的開發人員(即使用Apple向開發者簽發的開發者ID密鑰簽名)隔離的應用。
當你試圖打開都被隔離的應用程序,不在與本政策規定的方式簽署,你會得到一個錯誤,指出「X.app不能打開,因爲它是從一個身份不明的開發者」或「...不是從Mac App Store下載的。」如果它被隔離,但確實符合該政策,則會顯示「X.app是從互聯網下載的應用程序」,您確定要打開它嗎? (有一個打開按鈕可用)。如果未隔離,則不執行檢查,並直接打開應用程序。
您可以通過spctl --assess -vv /path/to/X.app
(它會告訴您它是否符合Gatekeeper策略)和codesign -dvv /path/to/X.app
獲得有關應用程序代碼簽名和策略狀態的更多信息。
總之,隔離是正常的,你應該期望你的用戶體驗到它(如果你沒有看到它的測試計算機之一,有什麼問題你怎麼測試)。網守錯誤取決於正確的簽名(請參閱codesign
和spctl
)和計算機上的網守策略設置;檢查兩者,看看發生了什麼。
戈登戴維森的答案是相當廣泛的,應該有助於在大多數情況下。在我的情況下,它沒有。
除此之外,他提到兩個看門的錯誤信息,還有第三個,就是從你的問題之一:
」的.app不能打開,因爲開發者的身份無法確認「。
在我的情況下,當一個嵌入式第三方框架的運行路徑設置錯誤時,出現這個消息:LD_RUNPATH_SEARCH_PATHS
在構建設置中引用了一些不允許的東西。
如果應用程序使用@rpath或絕對路徑 外鏈接到一個動態庫的應用程序的
蘋果的文檔,應用程序將通過關守拒絕。
,他們甚至狀態:
無論是協同設計還是SPCTL工具會顯示錯誤。錯誤 只會出現在系統日誌中。
的解決方案是修改第三方框架的東西的標準是這樣的:
$(inherited) @executable_path/../Frameworks @loader_path/Frameworks
感謝您的詳細答覆。所有工具都顯示該應用程序確實已簽名。這裏是我使用每個選項(應用程序名稱和團隊ID已更改)... – ColonelPanik
$ spctl --assess -vv MyApp.app MyApp.app:接受 source =開發者ID origin =開發人員ID應用程序:RT有限公司(ABCDEF1234) $協同設計--verify --deep --verbose = 2 MyApp.app MyApp.app:有效的磁盤上 MyApp.app:滿足其指定要求 – ColonelPanik
@ user3140551:我用完了想法,但這裏還有一些:'codesign -dvv'顯示「密封資源版本= 2」?如果不是,簽名是過時的格式。此外,您的應用程序是否還有未簽名/未正確簽名的依賴項(框架等)?看到[這個問題](http://stackoverflow.com/questions/31709087/failure-digitally-signing-a-mac-app-outside-xcode/32025478#32025478)爲例... –