用朴实的语言讲解签名与公证,面向第一次制作 Mac 应用的人
作者 Justinas Rolando,MacPip 的开发者
签名会在应用上署上你的名字,并表明它没有被改动。公证会把它提交给 Apple 的自动扫描。装订会把结果附加上去,使其可以离线检查。请按这个顺序进行,并且在构建版本定稿之后最后进行。
如果你的应用一直只在 Xcode 中运行,发布的这部分可能会像一堵证书墙。其实这些概念很简单,一共只有三个。如需完整细节并附上 Apple 文档链接,请阅读Mac 上的公证是什么。本文是写给开发者的简短版本。
三个步骤
- 签名相当于在应用上署上你的名字。Apple 颁发的 Developer ID 证书说明是谁制作的,签名则表明此后没有任何改动。获得该证书需要加入 Apple Developer Program,每年费用为 US$99。
- 公证是一种自动扫描。你上传已签名的应用,Apple 的服务会检查恶意内容和签名问题,如果没有发现问题,就会签发一张凭证。Apple 没有人会使用你的应用,它也不是 App Review。
- 装订(Stapling)会把那张凭证附加到你的文件上,这样 Mac 无需联网即可检查。
如果你只通过 Mac App Store 销售,就可以跳过后面两步。Apple 会为商店中的应用签名,其文档说明商店流程包含同等的安全检查。
如果跳过这些,用户会看到什么
他们会看到一个警告。macOS 表示无法验证该应用,而且自 macOS Sequoia 起,按住 Control 点按已经无法绕过它。他们必须前往“系统设置”,选择“仍要打开”。有些人会在这一步放弃,我不怪他们。“Apple 无法验证”是什么意思从用户那一端展示了同样的警告,值得读一遍。
能为你省下一个下午的顺序
- 完成构建。签名之后的任何改动都会破坏签名。
- 先对嵌套的代码签名,比如框架和辅助程序,然后再对应用本身签名。请使用强化运行时(hardened runtime)和安全时间戳,因为公证两者都需要。
- 如果你是以 DMG 形式发布,就把它放进 DMG,并对 DMG 也进行签名。
- 用
notarytool提交。Apple 表示扫描通常不到一小时。 - 即使成功也要阅读日志。
- 用
stapler进行装订。
检查你自己的构建版本
spctl -a -vv /Applications/YourApp.app xcrun stapler validate /Applications/YourApp.app
第一条命令你应当看到 source=Notarized Developer ID,第二条命令应当看到成功消息。把你得到的任何输出粘贴到公证说明中,它会说明每一行的含义,或告诉你它无法识别的内容。它在你的浏览器中读取文本,不会把内容发送到任何地方。
然后做一个能发现最多问题的测试:在另一台 Mac 或另一个用户账户上,通过浏览器下载你自己的构建版本,并打开它。发布清单按顺序列出了这一步以及其他步骤。
“已公证”不代表什么
这并不代表应用好用、保护隐私或安全。它只表示 Apple 的自动扫描没有发现它已知的问题。请注意,不要在你的网站上承诺超出这一点的内容。如何判断 Mac 应用是否安全从用户的角度解释了每项检查能证明什么、不能证明什么。
MacPip 如何处理这些
MacPip 要求下载文件已签名并经过公证。开源应用即使没有也欢迎收录,报告中会注明这一点。蓝勾表示有人在所示日期检查过该应用,签名和公证信息只有在我们对下载副本完成确认后才会出现在报告中。它不是安全保证,我们的规则对此也有说明。构建版本准备好后,你可以免费收录。
Real listings to look at
Check reports on MacPip say what was confirmed on a real copy. These two developer-minded listings are good ones to open and read.
ShediA Mac cleaner for developers that explains every item before it goes.Cleanup and Maintenance, checked October 30, 2026SpaceWiseSpaceWise safely cleans developer disk clutter like node_modules and Docker caches.Developer Tools, checked October 30, 2026
来源
- Apple 开发者:在分发前对 macOS 软件进行公证
- Apple 开发者:使用 Developer ID 为 Mac 软件签名
- Apple Developer News:macOS Sequoia 中运行时保护的更新
- MacPip 指南:Mac 上的公证是什么?