使用codesign命令签名bundle时提示‘no identity found’的问题求助
解决codesign提示“no identity found”的问题
别着急,这种问题我碰过好多次,咱们一步步排查:
1. 先确认签名身份真的在钥匙串里且有效
打开「钥匙串访问」app,切换到「登录」钥匙串和「我的证书」分类,找到你的开发者证书:
- 证书旁边要有展开的小三角,里面能看到对应的私钥,两者都不能有红色叉号(叉号代表私钥缺失或者证书无效)。
- 也可以用命令行直接列出所有可用的代码签名身份,终端里运行:
这个命令会输出所有符合要求的签名身份,你要确保你在security find-identity -v -p codesigningcodesign命令里用的<ID>和这里的某一条完全匹配(不管是哈希值还是证书全称)。
2. 检查钥匙串的访问权限
有时候证书导入了,但codesign没有权限访问私钥:
- 右键点击证书对应的私钥,选择「显示简介」,切换到「访问控制」标签。
- 要么勾选「允许所有应用程序访问此项目」,要么把你运行命令的终端(比如Terminal/iTerm)添加到允许列表里,之后重新尝试签名命令。
3. 确认签名身份的格式没出错
你用的<ID>可以是两种格式:
- 证书的常用名称:比如
"Apple Development: Your Name (XXXXXX)"(注意名称里有空格的话,一定要用双引号括起来); - 证书的SHA-1哈希值:就是
security find-identity输出里那串40位的十六进制字符(不需要引号)。
不管用哪种,都要保证和命令行输出的内容完全一致,大小写、空格都不能错。
4. 验证证书本身的有效性
双击证书查看详情:
- 确认「有效期」在当前时间范围内,过期的证书肯定用不了;
- 切换到「信任」标签,确保「代码签名」选项设为「使用系统默认值」(一般默认就没问题,别乱改)。
5. 检查p12导入的正确性
你导入p12的时候要注意:
- 输入的密码必须和导出p12时设置的一致;
- 要导入到「登录」钥匙串(除非你是用root权限运行
codesign,那才需要导入到「系统」钥匙串)。
举个实际的例子,如果security find-identity输出了这一行:
- ABC123DEF456GHI789JKL012MNOP345QRST678UVW "Apple Development: John Doe (XYZ123)"
那你的codesign命令可以写成这两种形式的任意一种:
codesign -v --force --verify --deep --verbose --sign ABC123DEF456GHI789JKL012MNOP345QRST678UVW <MyApp.app>
或者
codesign -v --force --verify --deep --verbose --sign "Apple Development: John Doe (XYZ123)" <MyApp.app>
内容的提问来源于stack exchange,提问作者RuLoViC
相关产品推荐
相关产品推荐

