Xcode编译签名的macOS发布版应用在部分Mac无法启动求助
解决Mac上Developer ID签名应用启动失败(错误-54/Operation not permitted)的问题
针对你遇到的情况——用有效Developer ID签名的Release应用在部分Mac能正常启动,但某台Mac上报错“应用无法打开”,终端open返回LSOpenURLsWithRole() failed with error -54,直接运行二进制提示Operation not permitted,且已开启“任何来源”、禁用spctl、确认文件权限无误——下面是几个针对性的排查和解决步骤:
1. 清除Gatekeeper的文件隔离标记
Mac会给从外部渠道(浏览器下载、邮件传输等)获取的文件添加隔离属性,即便关闭了spctl,这个标记仍可能阻止应用运行:
- 打开终端,先检查应用是否带有隔离属性:
如果输出里有xattr /Applications/Gaetano Lunches.appcom.apple.quarantine,说明文件被标记了隔离。 - 移除该属性:
之后再尝试启动应用。xattr -d com.apple.quarantine /Applications/Gaetano Lunches.app
2. 检查系统完整性保护(SIP)状态
虽然你禁用了spctl,但SIP的部分组件可能仍在限制应用运行:
- 查看当前SIP状态:
如果显示csrutil statusSystem Integrity Protection status: enabled.,可以临时禁用SIP(注意:解决问题后建议重新开启以保障系统安全):- 重启Mac,按住
Command + R进入恢复模式 - 打开终端,执行
csrutil disable - 重启系统后尝试启动应用
- 问题解决后,回到恢复模式执行
csrutil enable重新开启SIP
- 重启Mac,按住
3. 验证并修复应用签名
这台Mac可能存在签名验证异常,重新检查并修复签名:
- 先验证当前签名有效性:
查看输出中的codesign -dv --verbose=4 /Applications/Gaetano Lunches.appValidity和Authority字段,确认是有效的Developer ID签名。 - 如果签名存在问题,用你的Developer ID证书重新签名:
替换命令中的签名信息为你自己的证书内容,重新签名后再测试启动。codesign -f -s "Developer ID Application: Your Name (Your Team ID)" /Applications/Gaetano Lunches.app
4. 检查隐私与安全权限
即便全局开启了“任何来源”,某些隐私权限(如磁盘访问、文件读取)可能未在这台Mac上授予应用:
- 打开系统设置 → 隐私与安全
- 查看“完全磁盘访问权限”“文件和文件夹”等选项,确认
Gaetano Lunches.app已被添加并允许访问 - 若未添加,点击“+”按钮,找到应用所在路径添加后,重启应用尝试启动
5. 排查依赖库兼容性
这台Mac可能缺少应用依赖的系统库,或库版本与正常运行的Mac不一致:
- 用
otool查看应用的依赖库:
对比能正常运行的Mac上的依赖版本,检查是否存在缺失或版本差异otool -L /Applications/Gaetano Lunches.app/Contents/MacOS/Gaetano Lunches - 若有缺失,可尝试重新安装Xcode Command Line Tools,或把这台Mac的系统版本更新到与正常Mac一致
内容的提问来源于stack exchange,提问作者Denis Óbukhov
相关产品推荐
相关产品推荐

