代码签名错误:证书身份出现两次。

103

代码签名错误:证书标识 'iPhone Developer: XXXX (12345678)' 在密钥链中出现多次。codesign 工具要求只有一个。

所以我进入我的密钥链并将其删除。但每次我重新启动 Xcode 4 并且某个应用程序将过期的旧证书添加回到密钥链中时,我都会遇到此错误。有什么想法是哪个应用程序导致的吗?


可能是Xcode过期证书问题的重复。 - zoul
15个回答

98
我刚刚遇到了同样的问题。 问题已经解决了。 这个问题出现在我提交一个应用程序并安装了几个证书来签名应用程序之后。
快速解决方法: 打开钥匙串访问>点击我的证书>在那里你可能会看到 iPhone开发者:。你可能会看到两次! 选择最早到期日期的那个,右键点击并选择删除。
如果你还没有重启Xcode,请重启。 现在应该可以工作了。

27
还需要再执行一步!在删除重复证书后,您需要打开XCode中的组织者并刷新您的预配资料。 - Meekohi
7
在我删除了旧证书后,重新启动Xcode解决了我的同样的问题。 - Maksim
这个解决方案对我有效,我还得重新启动XCode。谢谢! - haxpor
在修改之前,也要记得解锁钥匙串。否则更改不会跨越重启而持久化。 - Heshan Perera
3
对我很有用,但还需要一步(我使用的是Xcode 4.6.3)。我删除了已过期(或即将过期)的证书,然后重新启动Xcode,但问题仍存在 - 旧的证书不知怎么又出现在钥匙串访问中。所以,在选择打开我的项目之前,我重新启动了Xcode,回到钥匙串访问,发现旧的证书再次出现,于是我删除了它。然后在已经运行的Xcode中打开我的项目,一切都正常 - 我又能够构建了。 - Ed Sinek
显示剩余2条评论

71

我想我知道为什么简单的删除无法工作了。因为开发证书仍然存储在配置文件中,当我在Keychain中删除证书后关闭/重新打开Xcode时,我看到旧证书又出现了。所以我再次将其删除。这样做起作用了。

对我而言,简单地删除配置文件的解决方案并没有起作用。

在我的情况下有效的解决方案:

  1. 退出Xcode
  2. 如果Keychain访问是打开的,请保持它处于打开状态。
  3. 现在启动Xcode。
  4. 请注意,Xcode在启动时会从其缓存中将其投诉的证书重新添加到钥匙串中。
  5. 继续将其删除。
  6. 编译和愉快的编码。

3
我尝试了所有上述解决方案,其中这个解决了问题。看起来有多种原因/解决方案。 - Nathan Hangen
+1:我可以确认,XCode确实会在启动时保留证书的“缓存”,并将它们添加进去--这种方式糟糕透了!它会导致很多问题!苹果,你应该感到羞愧,因为这已经让人浪费了无数时间来解决这个问题! - JRG-Developer

10
我意识到这是Xcode的一个错误。这篇帖子给了我一个线索来修复它: 证书神奇地重新出现在你的钥匙串中 在我的情况下,匹配的私钥在系统钥匙串中,只有我的名字(很难看出它是用于配置文件的)。我必须:
  • 将相关的私钥移动到“登录”钥匙串中
  • 重新启动Xcode,并注意到私钥现在显示为关联的(确认了它的用途)
  • 删除证书和私钥
  • 重新启动Xcode,噔!它不再添加我的旧证书了
有趣的观察是,当你删除证书时,它不会删除关联的私钥。在视觉上,它会将私钥显示在证书下方。不要被欺骗。

删除私钥对我也起作用了 - 最新的Xcode 2012年10月更新的Mountain Lion。 - ina

4

1
我也遇到了同样的问题。然而,我在这里或其他主题中都没有看到答案。你解决了吗? - Cliff

4
如果您是iOS开发者和企业iOS开发者计划的成员,并且在这两个应用程序中输入了公司名称,那么您将获得两个具有相同名称的有效分发证书。
我认为这个问题解决了这种情况: 开发人员和企业分发之间的CodeSign冲突

3

答案在这里

使用Organizer删除所有使用旧证书的旧供应配置文件,然后退出XCode,从钥匙链中删除旧证书并重新启动XCode。

看起来当您在供应配置文件中引用时,xcode会保留证书。


3

我也遇到了Xcode45-DP1的同样问题,这个方法对我有用:

  1. 从钥匙串中移除与您帐户相关的所有证书。关闭钥匙串。

  2. 从Xcode:Organizer:Device:Library:Provisioning Profiles中移除与您帐户相关的所有配置文件。关闭Xcode。

  3. 撤销您的证书并重新生成它,并将其下载到构建机器上。

  4. 在下载配置文件之前,单击下载按钮旁边的编辑以确保选择了您的名称。

  5. 然后下载配置文件

  6. 双击证书将其安装到钥匙串中

  7. 将配置文件拖到Xcode:Organizer:Device:Library:Provisioning Profiles

  8. 不要点击Xcode的刷新按钮。

  9. 进行构建。


1
我曾经遇到过这个问题,阅读了所有相关信息,最终我自己找到了解决方案。但是人们没有提到的是,在清理Xcode组织者中的证书和清理密钥链中的过期密钥之前,您需要确保在Provisioning Portal中没有任何过期的证书。 如果您有一个过期的证书用于旧版应用程序,该证书将与第一次构建一起被Xcode拉入其组织者中,并从那里进入您的密钥链,导致重复。

1
在我的情况下,Xcode正在查看的“缓存”是一个连接的iOS设备。要确定这是否是您的问题:
  1. 断开所有iOS设备的连接
  2. 从钥匙串访问中删除有问题的证书和私钥
  3. 重新启动Xcode
  4. 检查钥匙串访问:在我的情况下,此时不会重新创建副本
  5. 重新连接iOS设备
  6. 再次重新启动Xcode
  7. 检查钥匙串访问:在我的情况下,此时重新创建了副本
如果这是您的根本原因,您可以通过确保在启动Xcode之前断开iOS设备的连接来解决它。

1

我遇到了僵尸证书重新填充到我的钥匙串中,导致证书身份出现两次的问题。简单地删除重复的证书并没有起作用。

在Xcode中,当我查看目标中的代码签名时,我记得在“Ad Hoc”构建中有一个不同的分发配置文件,而在“Release”构建中则没有。

当我生成了一个新的证书时,我只为Ad Hoc构建下载了一个新的配置文件,而没有为Release构建下载。

Xcode保留了这两个配置文件的证书,因此导致了重复的证书...因为我忘记正确更新我的配置文件了。

确保将所有的配置文件都更新到新的证书,并同时在Xcode中更改所有的配置文件。

Be sure to update all your provisioning profiles with the new certificate, otherwise Xcode will try to put the certificate for BOTH profiles in the keychain... causing the duplicate error!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接