Xcode Server Build:“找到多个匹配的代码签名标识”

时间:2015-05-22 17:44:28

标签: xcode macos continuous-integration osx-server

突然之间,没有对Xcode构建服务器进行任何更改,我开始收到错误,即使是在不同的机器人,分支机构和应用程序中(所有这些都是Mac应用程序)。我没有更改构建服务器上的任何软件或配置(我知道),甚至没有更改。我在分析过程中得到错误一次:

  

检查依赖关系

     

代码签名错误:找到多个匹配的代码签名标识:找到了匹配“Mac Developer:OS X Server(N________L)”的多个代码签名标识(即证书和私钥对)。

在测试期间(虽然我的测试通过了 - 上面的那个是构建失败的原因):

  

测试失败:

     

找到多个匹配的代码签名标识:找到了匹配“Mac Developer:OS X Server(N________L)”的多个代码签名标识(即证书和私钥对)。

我尝试了以下操作,在每个步骤后触发构建,而不会更改消息:

  1. 触发了另一个版本
  2. 已更新至构建服务器上的最新Xcode(6.3.2)
  3. 通过Keychain Access搜索任何“OS X Server”证书或密钥,找不到任何
  4. 从Server.app中删除了所有开发人员团队。 注意:这很奇怪。在设置为“No Teams”之前,我不得不将其删除两次,但现在它仍然保持这种状态
  5. 我已登录以重新添加我的团队
  6. 再次移除它,在“卡住”之前仍需要完成两次
  7. 多次重启机器
  8. /Library/Developer/XcodeServer/ProvisioningProfiles
  9. 中删除了所有配置文件
  10. 删除配置文件后,再次使用我的开发者帐户登录。它们已被重新创建,但错误仍然存​​在
  11. 我关闭了机器人中的“执行分析操作”,它确实摆脱了消息,但重新开启,或者打开“执行存档操作”,重新引入它,这样就不是一个选项了(同样,我想要进行静态分析,这就是为什么它首先打开了。)

    假设目前Xcode Server的签名身份列表已损坏,我将如何在Server.app之外重置它们(因为我已经删除了那里的开发团队)?我找到了几个目录,似乎是一些故障排除和/或备份恢复的候选者,但是我不知道在不确定它们的用途的情况下乱七八糟。

    /Library/Developer/XcodeServer/Certificates
    /Library/Developer/XcodeServer/Keychains
    

    我注意到我的配置文件已于5月20日到期, 2016 。这意味着我的旧版本在两天前(2015年5月20日)到期,这是我最后一次成功(5/19)和第一次失败(5/21)版本之间的过期。

    现在,了解这些失败的根源后,问题现在变成:如何清除导致重复的旧配置文件(或证书等)?

    服务器在Yosemite(10.10.3),Server(4.1)和Xcode(6.3.2)上是最新的。

    更新

    我正在尝试列出代码签名身份,但是甚至无法让单个“Mac Developer:OS X Server”显示出来,更不用说多次出现了。这些是我尝试过的命令,它们只列出了钥匙串中的非服务器身份:

    security find-identity -p codesigning
    sudo -u _xcsbuildd security find-identity -p codesigning
    sudo -u _xcsd security find-identity -p codesigning
    

1 个答案:

答案 0 :(得分:2)

看起来像服务器中的错误实际上引入了重复的签名身份。我把它报告为rdar://21080937,如果你想欺骗它的话。

为了解决这个问题,我必须了解Xcode Server如何存储签名身份(完全归功于an extremely helpful answer to an unrelated question)。

Xcode Server将开发者计划证书存储在

/Library/Developer/XcodeServer/Keychains/Portal.keychain

按照以下步骤,我可以打开钥匙串,找到副本,将其删除,然后将其取回。这些步骤改编自上面的答案。

  1. 从Server.app退出Developer Portal,删除您遇到问题的开发团队

  2. 将Portal钥匙串复制到桌面:

    > sudo cp /Library/Developer/XcodeServer/Keychains/Portal.keychain ~/Desktop/
    

    Password: 您的管理员密码

    > sudo chown `whoami`:staff ~/Desktop/Portal.keychain 
    
  3. 将Portal密钥链密码设置为“123”

    > security set-keychain-password -o "`sudo cat /Library/Developer/XcodeServer/SharedSecrets/PortalKeychainSharedSecret`" ~/Desktop/Portal.keychain 
    

    New Password: 123

    Retype New Password: 123

  4. 打开钥匙串访问中的钥匙串:

    > open -b com.apple.keychainaccess ~/Desktop/Portal.keychain
    
  5. 使用密码“ 123 ”解锁“门户”钥匙串

  6. 找到错误列出的重复键

  7. 删除一个(我最近选择了一个修改过的 less ,但可能无关紧要)

  8. 锁定“Portal”钥匙串,退出“Keychain Access”

  9. 重置Portal密钥链密码:

    > security set-keychain-password -p "`sudo cat /Library/Developer/XcodeServer/SharedSecrets/PortalKeychainSharedSecret`" ~/Desktop/Portal.keychain 
    

    Password: 您的管理员密码(可选步骤)

    Old Password: 123

    可能会或可能不会再次询问您的管理员密码,请注意提示。

  10. 备份原始钥匙串

    > sudo cp /Library/Developer/XcodeServer/Keychains/Portal.keychain /Library/Developer/XcodeServer/Keychains/Portal.keychain.old
    
  11. 将Portal钥匙串复制回来

    > sudo cp ~/Desktop/Portal.keychain /Library/Developer/XcodeServer/Keychains/
    
  12. 修复新的钥匙串权限

    > sudo chown _xcsbuildd:_xcs /Library/Developer/XcodeServer/Keychains/Portal.keychain
    
  13. 由于系统缓存打开的钥匙串,请重新启动服务器

  14. 在Server.app

  15. 中添加您的开发团队
  16. 运行构建,验证一切看起来不错。如果是,请删除钥匙串的备份副本

    > rm ~/Desktop/Portal.keychain
    > sudo rm /Library/Developer/XcodeServer/Keychains/Portal.keychain.old