验证通过codesign,spctl和check-signature但未能运行的macOS应用程序“因为无法确认开发人员的身份”

时间:2016-09-30 02:45:14

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

我的macOS应用程序已经过编码并在某些计算机上运行但在另一台计算机上无法运行,因为Gatekeeper弹出“{App}无法打开,因为无法确认开发人员的身份。”

我希望在分发有缺陷的.dmg之前在构建计算机上检测到此问题,因此我查看了Checking Gatekeeper ConformanceExamining a Code Signature上的Apple文档,其中讨论了codesign,{{1 }和spctl。令人困惑的是,所有这些工具都报告.app由我的开发者帐户签名。

check-signature

证书,标识符&个人资料网站显示我帐户下未过期的“开发者ID申请”和“开发者ID安装人员”证书。我从未撤销任何Mac签名证书。我还检查了应用的Info.plist中$ 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 设置为CFBundlePackageType

这里发生了什么?

更新:将Mac从El Capitan升级到Sierra解决了这个问题。我仍然有兴趣了解在有用户遇到它的情况下可能出现的问题。

1 个答案:

答案 0 :(得分:3)

在我的情况下,当嵌入式第三方框架的运行路径设置错误时,会出现此消息:构建设置中的LD_RUNPATH_SEARCH_PATHS确实引用了不允许的内容。

Apple在此处记录https://developer.apple.com/library/content/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG207

  

如果应用使用@rpath或绝对路径链接到动态库   在应用程序之外,该应用程序将被Gatekeeper拒绝。

他们甚至说:

  

协同设计和spctl工具都不会显示错误。错误   只会出现在系统日志中。

解决方案是将第三方框架修改为这样的标准:

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