无法使用钥匙串访问(Mac OS X Mavericks)导入代码签名公钥或私钥

在试图构build一个iOS项目(在XCode),我需要导入我的同事的公钥和私钥的代码签名身份,但我无法这样做,因为我在Keychain访问中出现错误,说:“有错误发生无法导入项目/无法取得该项目的内容“

完整的详细信息:

我从同事的电脑上拿到了两把钥匙,把它们从他的钥匙链上作为两个文件输出:

Roomer Inc.p12(私钥)

Roomer Inc.pem(公钥)

当他输出这些时,他把密码留空(虽然我们也用“test”的密码试过了,结果也一样)。

当我双击Roomer Inc.p12(用于私钥)时,它会在钥匙串访问中打开并提示我select钥匙串(默认情况下select“login”

我点击“添加”,然后提示input密钥链(我留空)

接下来我总是在Keychain访问中看到这条消息:

错误的截图

但是,尽pipe出现此消息,但单击“确定”后,我会看到“Roomer Inc”的新私钥条目。 请注意,这个条目是“login”钥匙链中的一个私钥,就像我所期望的那样,但没有过期date(应该是这样吗?)

接下来,对于Roomer Inc.pem文件(公钥),我被要求select钥匙串(“login”),然后单击添加

然后,我也得到了公钥的“发生错误,无法导入项目/该项目的内容不能被检索”的消息。 然而,在这种情况下(与私钥不同),我没有看到任何对应于我刚刚添加的项目。

因此,看起来私钥条目可能会或可能不会(我无法validation),并且没有此错误消息,Roomer的公钥条目不能安装在钥匙串中。 请注意,我也尝试使用安全导入命令来导入公钥:

$ security import Roomer \ Inc.pem -f pkcs12〜/ Library / Keychains / login.keychain

1个密钥导入。

当我这样做,虽然命令返回“1键导入”我没有看到“Roomer公司”在我的钥匙串访问窗口(我closures了钥匙串访问并重新打开它)的公钥。

无论哪种方式,我们已经确定这是我们的阻挡者。 (当然的症状是XCode项目不会为与TestFlight一起使用的AdHoc供应configuration文件构build)。 我已经放弃了关于XCode构build和TestFlight设置的额外步骤,因为我们相信核心问题与上面所解释的导入键有关。

我们知道我们的问题,并且在这里张贴我的答案,以便其他人可能会觉得有帮助。

问题实际上是钥匙串访问用户体验问题。 让我备份并给出一点上下文:当您使用Apple创build分发证书时,可以基于PRIVATE KEY和基于应用程序的权限来创build它。

在“钥匙串访问”中,分发证书在其创build的私钥名称下方作为子项列出。 这里有一个问题:在Keychain访问中使用search框时(在我的情况下,我们input的是“Roomer”,因为这是我们发行证书上的名称),它不会查找具有该名称的证书,它会查找附加到该名称的私钥的证书。

因此,我的同事创build了一个基于名为“Jorge Davila”(他的名字)的私钥的分发证书,尽pipe分发证书被命名为“iPhone Distribution:Roomer Inc.”。

当他在“钥匙链访问”中search“Roomer”时,search结果中没有显示正确的那个,因为这个证书创build的密钥被命名为“Jorge Davila”而不是“Roomer”。 因此,他出口错误的证书,并没有意识到,因为有这个名字的其他人(一些过期)。

以下是正确的方式:

这是Keychain Access用户体验的一个相对细微的问题,而search工具并没有给你所期望的结果。 我张贴这个答案,希望其他人可能会觉得它有用。