Xcode 4 -reinstala certificados de chaveiro que eu excluo


85

Estou recebendo este erro:

Erro de CodeSign: a identidade do certificado 'iPhone Developer: XXX' aparece mais de uma vez nas chaves. A ferramenta de codesign requer que haja apenas um.

No começo, não se preocupe, vou apenas entrar no chaveiro e excluir o duplicado (mais antigo), o que fiz. Voltei, fechei o Xcode, reabri o Xcode e o projeto, mesmo erro. wtf eu pensei para mim mesmo. Volte para as chaves e o certificado está lá novamente. Excluo ambos os certificados, repito e observo que, conforme o projeto é carregado, os dois certificados que excluí voltam para o chaveiro.

Depois de muita pesquisa, assegurei-me de que não tinha o certificado nas chaves do sistema, o que não era verdade. Também fiz uma limpeza e reconstrução. Quando eu tinha duplicatas com o Xcode 3, eu podia simplesmente limpar a duplicata do chaveiro e estava tudo bem. Mas com o Xcode 4 ele literalmente os reinstala de alguma forma quando eu abro o projeto. Eu até apaguei todos os arquivos .cer em meu sistema dos quais ele poderia estar puxando.

Alguma sugestão?


1
Felicidades. Tive o mesmo problema. :)
RedBlueThing

Tem o mesmo problema. Isso acontece porque o Keychain não remove o certificado corretamente e você tem uma situação em que 2 certs aparecem (mas um é inválido). Basta remover inválido no aplicativo Keychain e isso funcionará bem. Mas é uma solução temporária. :(
Sergey Kopanev

Respostas:


103

A solução foi entrar no organizador - na biblioteca - perfis de provisionamento, excluir todos eles e reinstalar todos os perfis de que ainda precisava.


Sim! Posso confirmar que isso funciona. Mesmo que eu continuasse excluindo o do chaveiro, ele reaparecia. Depois de remover os perfis de provisionamento antigos do Organizer, tudo voltou ao normal. Obrigado! :)
RoLYroLLs

1
Funciona para mim também! Obrigado! Acho que o XCode4 está tentando fazer é inserir dev certs em seu keychain para perfis de prov que estão faltando, mesmo se os dev certs tiverem expirado.
iphone007,

5
Lembre-se também de regenerar seu perfil de aprovisionamento se você renovou seu dev cert. Não o fiz e quando adicionei novamente um perfil de prov antigo, o cert dev expirado associado foi reinserido no chaveiro, D'oh!
iphone007,

Tenha cuidado, de alguma forma eu apaguei meu keychain de login tentando apagar perfis. Não tenho certeza de como isso aconteceu, pois tenho certeza que a área da lista de chaves estava em foco quando eu clico em excluir. Faça backup antes de excluir e tenha cuidado.
avance

Isso ajuda, mas, como outros disseram, você realmente precisa ir até o keychain e excluir o certificado de desenvolvedor expirado, não apenas o perfil de provisionamento.
Ron Srebro

33

Eu tive esse mesmo problema e as soluções acima não resolveram meu problema (bem quase).

Eu tinha o mesmo ID de desenvolvedor / certificado duplicado do qual todos estão reclamando e tentei excluir todos os meus perfis, revogar / reemitir meu certificado, certificando-me de que não havia nenhum no keychain do sistema, reiniciando, etc. etc.

No final, acabou por não era um certificado no chaveiro do sistema, que tinha expirado e por isso foi escondido por padrão na lista.

Certifique-se de ver os certificados expirados no KeyChain

Para fazer isso:

  1. Abra o Acesso às Chaves
  2. Clique no menu Exibir
  3. Clique em Mostrar certificados expirados
  4. em seguida, procure e exclua certificados de desenvolvedor expirados

Incrível, você é um gênio. Eu tinha feito tudo listado em todos os lugares. Você me ajudou a resolver o problema de meses atrás. Deus te abençoê!
Bushra Shahid

1
Descobri que eu tinha um certificado expirado nas chaves do sistema. Isso me ajudou a encontrar! Obrigado!
christopher_f

11

O Xcode 4 tem um novo recurso "Provisionamento Automático de Dispositivo". Ele está localizado no organizador em perfis de biblioteca / provisionamento. Se você habilitou isso, ele baixará automaticamente seus perfis de provisionamento do servidor de provisionamento do desenvolvedor da apple e, portanto, você receberá o erro de ter duplicatas. A maneira mais fácil de corrigir isso é excluir todos os perfis de provisionamento e pressionar atualizar para o "Provisionamento automático de dispositivos". Isso carregará seus perfis de provisionamento do servidor e resolverá o problema.


Obrigado por isso. Excluí meus perfis e usei o provisionamento automático de dispositivos para recuperá-los e o problema foi embora.
Sasho de

Esta é a solução atualizada, funcionou para mim (depois de tentar as outras soluções, elas parecem estar desatualizadas)
Kasihasi

7

se quiser mexer no acesso do keychain para remover o certificado expirado, você pode tentar o seguinte:

  • crie um novo keychain, nomeie-o "expired" e mova SOMENTE o certificado expirado para ele.
  • exclua o keychain "expirado" recém-criado que contém SOMENTE o certificado expirado, quando solicitado, selecione "Excluir referências e arquivos".

o certificado expirado desaparece junto com as chaves. funcionou perfeitamente para mim.


6
  1. Remova todos os perfis de provisionamento do XCode Organizer;
  2. Remover certificados de desenvolvedor antigos do Keychain Access;
  3. Gere Perfis de Provisionamento apenas com o Certificado de Desenvolvedor correto;
  4. Baixe e instale os novos Perfis de Provisionamento;

- EDITAR -

Merge a resposta de @Codezy e o comentário de @ iphone007.


Sua resposta não corrigiu o problema. Na verdade, removi certificados de desenvolvedor e perfis de provisionamento várias vezes, mas os certificados de desenvolvedor antigos sempre são reinstalados. Mas o comentário de @ iphone007 é útil, eu apenas os mesclo ....
Sr. Ming,

2

Excluindo perfis de provisionamento na biblioteca do Organizer, além disso, você deve excluir o certificado de desenvolvedor do iPhone no Keychain Access. (O nome do certificado é provavelmente como "Desenvolvedor iPhone: XXXXX ..." e indicado pelo sinal de X vermelho, pois expirou)


Apenas remover e reinstalar perfis de provisionamento no Organizer não ajudou, mas sua sugestão de remover o perfil expirado das chaves corrigiu para mim, obrigado!
gulchrider

2

Passei meio dia para isso e finalmente encontrei a solução

  1. Abra KeyChain Access.app
  2. Selecione "Sistema" no menu "Chaveiros" à esquerda da tela do aplicativo Chaveiros
  3. Selecione "Certificados" no menu inferior "Categoria"
  4. Remova todas as certificações antigas.

Em seguida, feche Keychain.app e vá para Xcode -> Organizer

  1. Remover todos os perfis de provisionamento no menu Biblioteca
  2. Remover todos os perfis de provisionamento no menu Dispositivos
  3. Pressione o botão "Atualizar" no menu Biblioteca -> Perfil de Provisionamento
  4. Adicione perfis necessários ao seu dispositivo

Construa novamente seu aplicativo :)


1

Para a posteridade, esta é a estratégia para contornar esse problema em nosso script de construção automatizado:

  1. Antes de construir, mova o diretório ~ / Library / MobileDevices / Provisioning Profiles de lado
  2. Verifique se o utilitário de configuração do iPhone está em execução e feche-o (certificados sempre reaparecem se este aplicativo estiver aberto. No XCode 4.1, você também precisa fechar o organizador).
  3. Executar você construir
  4. Mova o diretório de perfis de provisionamento de volta
  5. Lucro?

1

Eu tentei tudo sugerido aqui, mas nada funcionou para mim, exceto reinstalar o XCode 4.3 resolvido magicamente.


1

Descobri uma maneira realmente fácil de consertar isso em 4.6.1. Você pode fazer isso sem reiniciar nada ou excluir perfis!

Com o Keychain Access e seu projeto Xcode aberto:

  1. No Xcode, abra Organizer - "Dispositivos" e selecione a "equipe" com o certificado duplicado.
  2. Mude para o Keychain Access e exclua o (s) certificado (s) duplicado (s) antigo (s). Nota: Certifique-se de ativar "mostrar certificados expirados" para não perder nenhum.
  3. Os certificados terão desaparecido do perfil da "equipe" no Organizador do Xcode.
  4. Limpe o projeto e a construção.

Espero que ajude!


0

o método acima não funciona para o meu caso

finalmente, eu vou para o chaveiro

e procure a chave digitando o nome

Finalmente encontrei o certificado que deveria ser excluído antes. então eu apaguei e o problema foi resolvido

é realmente frustrante, e não sei se é o bug ... realmente exaustivo.


0

Citando uma resposta a uma duplicata desta pergunta, alguns dos bugs do Xcode nesta área só podem ser resolvidos reiniciando o OS X .

No final, obtive sucesso excluindo tudo o que foi mencionado em qualquer uma das respostas a esta pergunta, reiniciando e instalando manualmente as partes de que precisava (não confiei / tentei o recurso de download automático de perfil / certificado).


0

Pelo que vale a pena, @AndreasPrang, sua resposta funcionou quando todas as opções acima não funcionaram. Pude ver que o certificado expirado não estava em nenhum lugar do keychain, mas quando fiz uma compilação, o Xcode disse que estava. Excluir os perfis de provisionamento (todos eles), selecionar meu nome na seção Equipe e clicar no ícone de atualização no canto inferior direito do organizador também não ajudou. Reiniciar o Xcode não ajudou, mas desligar o XCode, excluindo ~ / Library / Developer / Xcode sim. Quando reiniciei o XCode, ele reconstruiu tudo e ficou feliz.



0

Acabei de instalar o Xcode 4.6.1 e comecei a ter esse problema novamente. A última vez foi há muito tempo. Excluí os antigos perfis de provisionamento e os certificados, mas ainda não consegui criar.

Desta vez, descobri que tinha 2 certificados listados para mim na conta da equipe do portal do desenvolvedor. O primeiro expirou, o segundo não. O Xcode continuou pegando o primeiro que encontrou enquanto atualizava (ou talvez ambos).

Eu apaguei os dois certificados do chaveiro, baixei manualmente o certificado correto do portal da Apple e o adicionei manualmente ao chaveiro. Agora posso construir novamente.

(E enviei uma solicitação ao administrador da equipe para remover o certificado antigo.)


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.