Mac应用闪退若由签名过期引起,本质是Gatekeeper启动时直接拦截未验证程序;需先用codesign --display验证证书状态,再更新开发者证书并重新签名应用。

MacOS 应用闪退若由开发者签名过期引起,本质是系统拒绝运行未通过有效签名验证的程序。这不是崩溃日志问题,而是 Gatekeeper 在启动时直接拦截——所以应用点开即退,甚至不显示错误提示。解决核心是更新签名证书并重新签名,而非重装或清理缓存。
确认是否真是签名过期导致
先排除误判:打开“终端”,输入以下命令并回车:
codesign --display --verbose=4 /Applications/你的应用.app若输出中包含 “invalid signature”、“signature not valid” 或明确提示证书已过期(如 “expires 2025-08-12” 且当前日期已超),即可确认。若提示 “code object is not signed at all”,说明压根没签名,不属于“过期”范畴,处理方式不同。
更新 Mac 开发者证书
你当前使用的证书(如 Mac Developer 或 Developer ID Application)已在 Apple Developer 网站过期。需重新生成:
- 访问 Apple Developer Account,用开发者账号登录
- 进入 Certificates, Identifiers & Profiles → Certificates
- 找到已失效的证书(状态为 “Expired” 或 “Invalid”),点击右侧 “−” 删除(可选,非必须)
- 点击 “+” → 选择对应类型:Mac Development(本地调试用)或 Developer ID Application(分发给用户用)
- 按向导创建 CSR 文件(需用“钥匙串访问”生成),上传后下载新证书(.cer 文件)
- 双击下载的 .cer 文件,自动导入到“登录”钥匙串
对应用重新签名
证书更新后,必须用新证书对应用包重新签名,旧签名不会自动刷新:
- 确保应用处于未运行状态,且不在“程序坞”中常驻
- 在终端中执行(以 Developer ID 为例,替换为你实际使用的证书名称):
codesign --force --deep --sign "Developer ID Application: XXX" /Applications/你的应用.app - 验证是否成功:
codesign --verify --verbose /Applications/你的应用.app
若无输出即表示验证通过;若有报错,检查证书名称是否拼写一致、是否在“登录”钥匙串中、是否被锁住(右键证书→“显示简介”→“信任”设为“使用系统默认设置”) - 如应用含 Helper 工具或内嵌框架,建议加
--deep参数确保全路径签名;若仍失败,可尝试--options runtime(适配 macOS 10.15+ 的硬编码限制)
分发场景下的特别注意
如果你是开发者,将应用提供给他人安装:
- 务必使用 Developer ID Application 证书签名,而非 Mac Development 证书(后者仅限本机调试)
- 签名后,还需用 Developer ID Installer 证书对 .pkg 安装包签名(如有)
- 用户首次运行时仍可能看到“无法验证开发者”提示,需手动右键→“打开”绕过一次;后续即可正常启动
- 避免使用 Xcode 自动管理签名时勾选“Automatically manage signing”,它易混用团队证书;建议手动指定证书并关闭自动管理











