一个签名错误的解决——codesign failed with exit code 1

本文详细记录了从Macbook迁移开发环境至MacMini的过程,特别是遇到的Xcode证书配置问题,包括导入错误证书、无法调试真机与模拟器问题的解决方法。最终发现并解决了钥匙串系统账号与登录账号中证书冲突导致的codesignfailedwithexitcode1错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前日,Macbook的硬盘不幸挂了,于是将开发环境迁移到Mac Mini下。大家知道,对于Xcode来说,最麻烦的就是各种证书、ProvisioningProfile的配置问题。将原来的各种开发证书和.p12证书导入到mini上,接下来就碰到了各种莫名其妙的问题。先是无法development(可以debug),发现是证书导错了(没有用Agent证书,只有Agent可以发布)。于是制作证书请求,重新下载证书。

等到部署的问题解决后,又发现无法调试——真机可以,但模拟器不行,一进入程序就退出,不报任何错误。试了各种招数都不行,怀疑是模拟器问题。于是卸了Xcode重装。重启后问题解决。

但又出现新的问题。模拟器可以调试程序了,真机调试可以编译,但无法运行,报错codesign failded with exit code 1。网上查了下资料,没解决问题。

后来打开错误日志发现下列描述:

iPhone Developer: Hongyan Yang (GNF23CPXYK):ambiguous (matches "iPhone Developer: Hongyan Yang (GNF23CPXYK)" in/Users/km-cn/Library/Keychains/login.keychain and "iPhone Developer:Hongyan Yang (GNF23CPXYK)" in /Library/Keychains/System.keychain)

Command/usr/bin/codesign failed with exit code 1

原来是钥匙串系统帐号和登录帐号中的证书冲突了。打开钥匙串,查看登录帐号中的开发者证书(注意identifier为 GNF23CPXYK 的证书):


查看系统帐号下也有两个identifier为GNF23CPXYK 的证书,显然导证书的时候不知道怎么把证书导进了系统帐号,并且还重复了。把这两个证书删除,关闭钥匙串,问题解决。



### Xcode CodeSign 命令失败的原因分析 当在 Xcode 中遇到 `Command CodeSign failed with a nonzero exit code` 的错误时,通常是因为签名配置不正确或者开发环境中的某些设置存在问题。以下是可能的原因以及解决方案: #### 1. **证书问题** 如果钥匙串中显示新添加的证书状态为“不受信任”,这可能是由于缺少 Apple Worldwide Developer Relations Certification Intermediate Certificate (WWDR)[^2]。 解决方法如下: - 访问苹果开发者官网并下载最新的 WWDR 证书: [https://developer.apple.com/cn/support/code-signing/](https://developer.apple.com/cn/support/code-signing/) - 双击下载后的 `.cer` 文件将其安装到钥匙串中。 - 确认该证书已成功导入,并且其状态为有效。 #### 2. **过期或无效证书** 有时项目使用的旧证书可能已经过期或不再受支持[^4]。这种情况下需要清理这些证书以避免冲突。 操作步骤: - 打开钥匙串访问工具 (`Keychain Access`) 并删除所有标记为“过期”的证书。 - 如果存在多个版本的相同名称证书,则保留最新有效的那个。 - 刷新项目的 Build Settings 配置项来匹配当前可用的新证书。 #### 3. **Provisioning Profile 不一致** 更换新的描述文件后可能导致之前的配置失效。因此建议重新下载适用于目标设备类型的 Provisioning Profiles(即 Development 或 Distribution),并通过以下方式应用它们: - 在 Xcode Preferences -> Accounts 页面登录对应的 Apple ID; - 自动刷新关联资源或将手动获取的 profile 导入至本地存储路径 ~/Library/MobileDevice/Provisioning\ Profiles/ 下; #### 4. **跨平台迁移引发的问题** 对于从 Windows 转移到 Mac 上继续开发的情况,可能会因编码差异而导致脚本执行阶段出现问题[^3]。对此可以尝试调整 Shell Script 设置部分的内容格式化选项,比如替换换行符类型(CRLF vs LF),确保兼容 Unix/Linux 标准。 另外还需确认 Team Identifier 是否正确指定给对应的应用程序包名(com.example.appname)下才能正常完成签署流程。 --- ```bash # 示例代码用于验证shell script是否存在CRLF转义字符 find . -type f -exec dos2unix {} \; ``` 以上命令可以帮助批量转换潜在影响因素之一——文本文件内部存在的不同操作系统间默认采用的不同风格结束标志位。 --- ### 总结 通过上述措施应该能够有效地处理大部分由 Codesign 引发的相关异常状况。不过具体实施过程中还需要密切观察实际反馈信息以便进一步排查深层次原因所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值