I am trying to switch on a certain keychain, and close another one. I need this because our enterprise & appstore identities are called the same.
Right now, I do a "security unlock-keychain" followed by a "security default-keychain" to open the correct keychain and do a "security lock-keychain" on the keychain I wish not to use.
But xcodebuild still sees the entries in both keychains and gives up.
iPhone Distribution: Company name.: ambiguous (matches "iPhone Distribution: Company name." in /Users/user/Library/Keychains/login.keychain and "iPhone Distribution: Company name" in /Users/user/Library/Keychains/enterprise.keychain)
How do I prevent the system from finding the entry in the keychain that I lock?
You can tell Xcode which keychain to use:
Or, if you call
codesign
directly:If you use PackageApplication, there isn't a way to set this. However, PackageApplication is a pretty simple script that can be reimplemented if necessary (very useful if you're integrating with a larger system/script).
Another solution for xcode version 6 and below: specify your certificate by SHA1 instead of by (ambiguous) name. From "man codesign":
And from "security help find-certificate"
Unfortunately, this method requires using the PackageSign script, which has been deprecated in Xcode 7
Solution: I've put all the appstore related stuff in the login keychain, and the enterprise stuff in a seperate keychain file.
In the buildscript, I switch between those as follows: