2012年,我使用我的Apple开发人员ID签名了该工具,以便Gatekeeper不会阻止它,一切都很顺利。现在我注意到,在macOS Sierra(10.12)下它被阻止了,并且在测试期间,我还发现它也被10.11.6阻止。(当我说被阻止时,我指用户必须右键单击它并选择“打开”,而不是在警告对话框中给出选项。)它仍然可以在10.11.2上正常工作! – 如果我没记错,Mac OS X 10.11.4有一个错误,即使已经签名,也会阻止非应用程序包。但我认为这个问题在10.11.5中得到了修复。也许它相关呢?
我已尝试使用Sierra下的Xcode 8重新编译和重新签署可执行文件。我尝试在二进制文件中嵌入Info.plist(这之前我没有做过)。我尝试进行存档而不仅仅是“构建”,以防止出现调试与发布配置的问题。我已经花了两天时间搜索验证可执行文件是否正确签名的方法,结果看似相互矛盾……
有这个:
codesign --verify --verbose <executable>
<executable>: valid on disk
<executable>: satisfies its Designated Requirement
还有这个:
spctl --assess --verbose <executable>
<executable>: rejected (the code is valid but does not seem to be an app)
source=matched cdhash
还有这个:
spctl -a -v --raw <executable>
<executable>: accepted
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>assessment:authority</key>
<dict>
<key>assessment:authority:flags</key>
<integer>0</integer>
<key>assessment:authority:source</key>
<string>allowed cdhash</string>
<key>assessment:authority:weak</key>
<true/>
</dict>
<key>assessment:cserror</key>
<integer>-67002</integer>
<key>assessment:remote</key>
<true/>
<key>assessment:verdict</key>
<true/>
</dict>
</plist>
我想我的问题的一部分是我不知道经过有效的苹果开发者ID签名后的命令行可执行文件应该看起来像什么。而且我也不知道是否这是macOS的问题,我无法做任何事情。同时,要在谷歌上找到与代码签名Unix命令行可执行文件相关的信息也非常困难。
如果您能提供任何有关此问题的见解,我将不胜感激。谢谢!
codesign
中使用--strict
选项。另外,尝试在spctl
中使用-t open
选项,因为双击可执行文件并不会直接执行它,而是将其作为文档传递给终端,终端将路径作为命令执行。这可能会解决“似乎不是应用程序”的问题。您还可以多次指定-v
以增加详细程度。使用--ignore-cache
只是为了确保您正在评估新文件。 - Ken Thomases