我在 Xcode 中有一个“命令行工具”目标(不是应用程序包),它被 Gatekeeper 阻止。我多年来一直使用这个工具作为我的 PostCheck 地址簿插件的简单安装程序。
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>
我想我的部分问题是我不知道使用有效的 Apple 开发者 ID 签名后命令行可执行文件应该是什么样子。而且我也不知道这是否是 macOS 的问题,无论如何我都无能为力。通过 Google 搜索命令行工具和代码签名问题并找到与对命令行 Unix 可执行文件进行代码签名实际相关的内容也非常困难。
我很感激任何对这里可能发生的事情的见解。谢谢!
我不想回答我的问题,但如果有人遇到同样的问题:
解决方案是在签名的磁盘映像上而不是在 zip 文件中分发命令行工具。
我最终测试回 10.11.4 并确认问题就是从那时开始的。 (当时我一定是测试不当。)OS X 只会阻止双击 Unix 命令行工具,无论我如何签名。这可能是最好的,因为大多数命令行工具将从 Terminal.app 中运行。
对于 Sierra,事实证明我无论如何都需要签名的 DMG 来绕过 Gatekeeper 的新路径随机化功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)