macdeployqt签名Qt应用出现dylib字符串表及钥匙串错误如何解决
问题1:dylib文件触发字符串表错误的原因
该错误是install_name_tool识别dylib文件结构异常导致的,常见触发场景如下:
- 你的dylib为同时包含x86_64、arm64架构的通用二进制文件,Qt 5.15.2版本的
macdeployqt对通用二进制的兼容性存在已知缺陷,处理时会误判文件结构 - dylib本身编译生成不完整,或复制到app包过程中出现文件损坏,可通过
otool -l [dylib文件路径]验证文件结构有效性,若otool也抛出结构错误则需重新编译对应dylib - dylib携带未剥离的调试符号,或此前被其他工具修改过链接信息导致文件结构不符合预期,可先执行
strip -x [dylib文件路径]剥离冗余信息后重试 - 若在Rosetta 2模拟环境下编译arm64架构的dylib,也会出现
install_name_tool识别异常,建议切换到对应原生架构的终端执行部署操作
问题2:代码签名报错的原因及证书信息查看方式
报错常见原因
- 签名标识填写错误:使用的证书完整名称和命令中填写的内容不匹配
- 证书状态异常:仅导入了证书公钥、缺失对应的私钥,或证书已过期,或未导入到当前用户的「登录」钥匙串中
- 钥匙串权限问题:执行命令的终端无钥匙串访问权限,若为远程/SSH场景执行命令,需先运行
security unlock-keychain解锁登录钥匙串
证书正确名称查看方式
打开「钥匙串访问」应用,在左侧边栏选择「我的证书」分类,找到对应的Developer ID Application证书,证书显示的完整名称(包含末尾括号内的团队ID,格式为Developer ID Application: [公司名] ([团队ID]))即为需要填写到命令中的正确签名标识。如果存在多个同名证书,需先删除过期的无效证书避免冲突。
临时规避方案
可以先去掉macdeployqt命令中的-codesign参数,完成应用打包后手动执行codesign命令完成签名,可同时规避上述两个错误。
内容的提问来源于stack exchange,提问作者Jono_R
相关产品推荐
相关产品推荐

