If you work with Xcode code signing long enough you’ll run into an error like this:
/usr/bin/codesign failed with exit code 1
If you view the build results (Build->Build Results), and expand the error message (there is a little paragraph button on the right-hand side of the line) you may see something like this:
iPhone Developer: Firstname Lastname (hashcode): ambiguous (matches "iPhone Developer: Firstname Lastname (hashcode)" in /Library/Keychains/System.keychain and "iPhone Developer: Firstname Lastname (hashcode)" in /Users/username/Library/Keychains/login.keychain)
Command /usr/bin/codesign failed with exit code 1
You have two certificates, with the same unique identifiers. One is in your login keychain and the other is in your system keychain. The real problem is, you probably have an expired certificate conflicting with your active certificate.
See my video explaining how to fix Xcode codesign failed with exit code 1; expired certificates causing ambiguous matches. You can also follow along with the screenshots below.
You wouldn’t know it when viewing the Keychain Access app. When you view your login certificates it will probably look like everything is fine. Open Applications->Utilities->Keychain Access. Then select the login keychain and Certificates category. Everything will probably look fine.
And when you view your system certificates, there won’t be anything there either. Select the System keychain and Certificates category.
You have to show expired certificates. For some reason, this isn’t on by default. From the menu, choose View->Show Expired Certificates.
Then you will see the offending certificate with an onerous red x circle.
Just delete the old certificate and build again.
I hope this saves someone some time.
29 thoughts on “Xcode codesign failed with exit code 1; expired certificates causing ambiguous matches”
Thank you very much… excellent article; wasted 2 days looking for the solution
That sucks! Glad you got the help you needed, though.
Thanks a lot!!. Excellent article and it solved our problem. We have wasted 3 days on this issue.
Thanks very much! very helpful!
Excellent! This save me a lot!!!
View->Show Expired Certificates is a key!
thanks so much, but I had another twist. The KeyChain Access utility wouldn’t let me delete any of the duplicate certificates in the System keychain.
I finally got it to work by rebooting the machine. I tried quiting everything and disconnecting the device, but nothing worked. This was with xcode 4.2 on leopard.
At any rate, I decided to reboot and that cleared the problem – I was then able to clear the duplicate certs and compile my app.
It is possible that kicking /usr/sbin/securityd might have worked as well.
Incredibly helpful! Thank you so much
Thank you. One little missing option that can drive you crazy. 😉
FINALLY!!!! Thank you! ….Show Expired Certificates….
Thank you a lot… the trick was really to delete the old certificate in the system section…
That’s right. I’m glad I could help you find it. It’s silly that it’s not more obvious.
Thank you, this is the solution for me with a Appcelerator project.
Me too. Thanks.
thank you very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very MUCH
Now I understand! Thanks for all of the effort!
I’m glad to help you guys out. It was such a pain when I was trying to find the problem myself.
Thanks so very much. Spent hours++ trying to figure this one out!
Thank you very very very very much.
Thanks for the tip here! This head-scratcher was threatening to make me turn myself bald before my time. =)
THANKS! you solved my issue too!
Thanks a lot for these steps. The view Show Expired Certs fixed my issue. I could have never figured that out..
Thank you SOOOOOO much!!! I have been cursing Apple for hours now lol. I even made a new project called F*** Y** Apple thinking it was a corrupted project 🙂 It all works now!
THANKS TO YOU!!! I was going crazy trying to figure out what was wrong. You saved my monitor from any more verbal abuse… for the moment. 🙂
Thank you so much. I’ve been trying for hours to fix this issue, jumping through all kinds of hoops, deleting and re-downloading certificates, manually editing project files… and this was it.
Why viewing expired certificates is only turned off be default in the System view of Keychain is beyond me. Uggh.
That’s exactly what happened to me, too. I’m really glad it helped to share this information. It seems like the expired certs should get extra visibility, not less.