Xcode 服务器构建:"Multiple matching codesigning identities found"

Xcode Server Build: "Multiple matching codesigning identities found"

突然之间,在 Xcode 构建服务器没有任何变化的情况下,我开始遇到错误,即使是在不同的机器人、分支和应用程序(都是 Mac 应用程序)中也是如此。我没有更改构建服务器上的任何软件或配置(据我所知),甚至没有登录。我在分析过程中得到一次错误:

Check dependencies

Code Sign error: Multiple matching codesigning identities found: Multiple codesigning identities (i.e. certificate and private key pairs) matching “Mac Developer: OS X Server (N________L)” were found.

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

Testing failed:

Multiple matching codesigning identities found: Multiple codesigning identities (i.e. certificate and private key pairs) matching “Mac Developer: OS X Server (N________L)” were found.

我尝试了以下方法,在每一步后触发构建,消息没有变化:

  1. 触发了另一个构建
  2. 已更新到构建服务器 (6.3.2) 上的最新 Xcode
  3. 通过钥匙串访问搜索任何 "OS X Server" 证书或密钥,找到 none
  4. 从 Server.app 中删除了所有开发团队。 注意:这很奇怪。在设置读取 "No Teams" 之前,我不得不将其删除两次,但现在它保持原样
  5. 我再次登录以添加我的团队
  6. 又删了,之前还得删两次"stuck"
  7. 多次重启机器
  8. 已从 /Library/Developer/XcodeServer/ProvisioningProfiles
  9. 中删除所有配置文件
  10. 删除配置文件后再次使用我的开发者帐户登录。它们已被重新创建,但错误仍然存​​在

我在 bot 中关闭了 "Perform analyze action",它确实摆脱了消息,但是重新打开它,或者打开 "Perform archive action",重新引入它,所以这不是一个选项(也,我想执行静态分析,这就是为什么首先打开它的原因)。

假设 Xcode 服务器的签名身份列表已损坏,我将如何在 Server.app 之外重置它们(因为我已经删除了那里的开发团队)?我发现了几个目录,它们看起来像是一些故障排除 and/or 备份恢复的候选目录,但我犹豫着在不确定它们的用途的情况下乱搞。

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

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

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

服务器在 Yosemite (10.10.3)、服务器 (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

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

为了修复它,我必须了解 Xcode 服务器如何存储签名身份(完全感谢 an extremely helpful answer to an unrelated question)。

Xcode 服务器将 Developer Program 证书存储在

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

按照以下步骤,我能够打开钥匙串,找到重复项,将其删除,然后放回去。这些步骤改编自上面链接的答案。

  1. 从 Server.app 退出开发者门户,方法是删除您遇到问题的开发者团队

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

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

    Password: 您的管理员密码

    > sudo chown `whoami`:staff ~/Desktop/Portal.keychain 
    
  3. 将门户钥匙串密码设置为“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. 查找错误中所列名称的重复键

  8. 去掉一个(我挑了最近修改less的那个,不过可能没关系)

  9. 锁定“Portal”keychain,退出“Keychain Access”

  10. 重置门户钥匙串密码:

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

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

    Old Password: 123

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

  11. 备份原始钥匙串

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

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

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

  15. 在 Server.app

  16. 中重新添加您的开发团队
  17. 运行 构建,验证一切正常。如果是这样,请删除钥匙串的备份副本

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