第一步:Gatekeeper (门禁) 的最终裁决
这是最重要的测试,它完全模拟了用户第一次打开您的应用时,macOS 系统的反应。
-
打开“终端”App。
-
输入以下命令并回车:
Bash
spctl --assess --verbose=4 /Applications/xxx.app
-
期望的成功结果 ✅:
/Applications/xxx.app: accepted source=Notarized Developer ID看到
accepted和Notarized Developer ID,表示您的应用已被系统完全信任,这是最完美的结果。 -
可能的问题结果 ❌: 如果看到
rejected,或者source显示为Unnotarized Developer ID,说明公证步骤失败了或没有执行。
第二步:深度签名完整性验证
这个命令会递归检查应用包内所有文件(包括您的扩展)的签名是否完整且在打包后未被篡改。
-
在终端中输入以下命令并回车:
Bash
codesign --verify --deep --strict --verbose=4 /Applications/xxx.app -
期望的成功结果 ✅: 没有任何输出。是的,这个命令成功执行后是“沉默”的。安静就代表完美,证明签名是完好的。
-
可能的问题结果 ❌: 如果输出了任何错误信息(比如
a sealed resource is missing or invalid或resource modified),说明签名在打包过程中被破坏了。
第三步:查看签名身份和公证票据
我们可以用这个命令查看是谁签的名,以及检查公证信息。
-
查看签名身份:
Bash
codesign -dv --verbose=4 /Applications/xxx.app-
您应该关注的输出信息:
Identifier=com.xxx.app(或您最终使用的ID)Authority=Developer ID Application: xxxxx . ...Authority=Developer ID Certification AuthorityAuthority=Apple Root CATeamIdentifier=xxxxxxx
-
您应该能看到一个完整的信任链,从您的证书一直到苹果的根证书。
-
-
检查公证票据 (Notarization Ticket) :
Bash
stapler validate -v /Applications/xxx.app- 期望的成功结果 ✅: 您应该看到类似
The validate action worked!的成功信息。 - 可能的问题结果 ❌: 如果提示票据找不到或无效,说明公证未成功附加到应用上。
- 期望的成功结果 ✅: 您应该看到类似
第四步:检查授权 (Entitlements)
最后,我们可以检查一下主应用和扩展的“权限列表”是否已正确嵌入签名中。
-
检查主应用的授权:
Bash
codesign -d --entitlements - /Applications/xxx.app -
检查扩展的授权:
Bash
codesign -d --entitlements - /Applications/xxx.app/Contents/Plugins/xxxExtension.appex
- 期望的结果 ✅: 这两个命令的输出应该是两个
.plist格式的 XML。请确认它们的内容和您在build文件夹中创建的entitlements.mac.plist和entitlements.mac.extension.plist文件内容一致。
如果您以上所有命令(特别是第一步的 spctl 和第二步的 codesign --verify)都得到了预期的成功结果,那么就可以满怀信心地将这个应用发给您的同事了!它已经达到了苹果官方分发标准。
恭喜您完成了整个复杂但非常有价值的流程!