O comando Xcode / usr / bin / codesign falhou com o código de saída 1: errSecInternalComponent

105

Estou tentando adicionar um novo perfil de provisionamento ao meu Xcode, para testar um aplicativo no dispositivo. Aqui estão as etapas que segui:

  1. Excluiu todos os certificados e perfis de provisionamento

  2. Criar / Adicionar Certificado IOS Dev

  3. Adicionar meu dispositivo IOS online

  4. Criar Perfil de Provisionamento IOS

  5. Adicionar Perfil de Provisionamento IOS

  6. App limpo

  7. Crie e execute o aplicativo

  8. Definir Codesigning e Perfil de Provisionamento nas Configurações de Compilação

  9. Muita pesquisa no Google para nenhum sucesso

Aqui está o erro que recebo:

CSSM_SignData returned: 800108E6
/Users/alexpelletier/Library/Developer/Xcode/DerivedData/MyExpense-efnqzvoqwngzcmazaotyalepiice/Build/Products/Debug-iphoneos/MyExpense.app:     errSecInternalComponent
Command /usr/bin/codesign failed with exit code 1
Alex Pelletier
fonte
1
O erro vem de uma incompatibilidade na configuração do perfil de provisionamento e os certificados e o id do pacote. Certifique-se de que seu PP, id de pacote e certificados estão configurados corretamente no e atribuídos corretamente no iTunes Connect e no aplicativo.
Alex Pelletier
1
Eu encontrei esse problema ao ir do Xcode 11.2.1 para o 11.3 durante a assinatura de código de estruturas criadas por mim. Nenhum perfil de provisionamento estava envolvido. A resposta de Mohit Manhas esclareceu tudo.
Daniel Zhang
Isso acontece se você estiver usando SSH e o codesign não tiver permissão para acessar a chave privada no Keychain. Para verificar isso, encontre a chave no Keychain, clique com o botão direito e selecione "Get Info", mude para "Access Control" e veja se o aplicativo 'codesign' está na lista de "sempre permitir acesso". Veja este comentário github.com/electron-userland/electron-builder/issues/… O que eu fiz foi rodar os scripts uma vez a partir da GUI e clicar em "Sempre permitir" para acesso à chave, então começou a funcionar.
ArticIceJuice

Respostas:

240

Abra o Acesso às Chaves e , no menu Arquivo, selecione Bloquear Todas as Chaves .

Em seguida, volte para o Xcode, limpe e reconstrua. Ele solicitará sua senha novamente para desbloquear o chaveiro.

Depois disso, supondo que você não tenha outros problemas de compilação, será bem-sucedido!

Mohit Manhas
fonte
7
Inacreditável que esse bloqueio e desbloqueio idiotas ajudem! Obrigado
Josip B.
8
Esta deve ser a resposta aceita. Muito mais lógico do que reiniciar!
yonix
3
Funcionou para mim também. Construir um apk para Android 30 segundos, construir um aplicativo para iOS .. 2hs.
Gabe
1
Sério WTF ?! Obrigado!
Peter N Lewis
1
@FredericP Para mim, recentemente alterei minha senha. Portanto, houve alguma interação entre a última vez que o chaveiro foi desbloqueado pelo xcode e a senha usada para isso.
Sherrellbc 02 de
77

Parece um bug no mecanismo de assinatura de código, reiniciar o mac deve resolver o problema

sigabrt
fonte
caso diferente, mas mensagem de erro semelhante - reiniciar funcionou.
mikus
Quase quatro anos depois, e ainda funciona! Esqueci a Regra de Ouro - "Em caso de dúvida, reinicie!"
Alan
2
Se você está esperando por uma solução menos destrutiva, veja a resposta de Mohit Manhas abaixo
yonix
não me ajudou
Anoop Vaidya
70

Isso ocorre quando o keychain de login está bloqueado. Para desbloquear as chaves de login, execute:

security unlock-keychain login.keychain

Se o seu chaveiro for protegido por senha, especifique a senha usando a -popção.

Em seguida, tente a operação de construção ou assinatura de código novamente. O código de erro em questão é descrito nos documentos da Apple como um erro interno, então é perfeitamente possível que isso ocorra em outros casos também.

cbracken
fonte
1
Infelizmente, esta solução parece totalmente circular: a execução do comando acima requer que você insira a senha, o que é obviamente impossível em uma sessão não interativa (como ao executar isso por meio de um agente de CI como o Jenkins).
Konrad Rudolph de
Esse é um bom ponto - como você disse, isso não é apropriado para uma sessão não interativa, como um bot de CI. É útil ao executar compilações remotas em uma sessão de linha de comando (por exemplo, via ssh).
cbracken
3
Tivemos um problema semelhante no Jenkins e, além do que é mencionado no comando acima, tivemos que passar a senha como um argumento para o comando, então fizemos "security unlock-keychain -p $ KeychainPassword <login-keychain>", onde você pode facilmente armazenar KeychainPaasword no Jenkins com segurança.
Mohit Tater
1
Eu não posso agradecer o suficiente por este post. Passei alguns dias tentando descobrir por que codesignestava falhando e este é o comando mágico que me salvou !!!
Dimu4
32

Tive o mesmo problema em High Sierra/ Xcode 9.4.1, todas as tentativas de login terminaram emerrSecInternalComponent

    • Vá para Acesso às Chaves
    • Vá para o chaveiro de login
    • Selecione a categoria "Meus certificados"
    • Encontre o certificado com o qual você está assinando e expanda-o para ver a chave.
    • Dê um duplo clique na chave
    • Vá para a guia "Controle de acesso".
    • Atualize o controle de acesso da chave para "Permitir que todos os aplicativos acessem este item"

Alternativamente:

execute o comando codesign no terminal mac e "Sempre permitir" / usr / bin / codesign acesso à chave

  1. Se tentar assinar de ssh / CI, você também precisa executar

    security unlock-keychain login.keychain

    antes de tentar assinar o pacote de aplicativos

Equilíbrio
fonte
Você pode falar sobre "atualizar o controle de acesso da chave para" Permitir que todos os aplicativos acessem este item "? Não tenho ideia do que isso significa.
Jon McClung
2
@JonMcClung Abra o acesso do keychain, vá para login keychain - meus certificados. Encontre o certificado com o qual você está assinando e expanda-o para ver a chave. Clique duas vezes na tecla e você verá a guia "Controle de acesso". Mudar para permitir está aí
Equilibrium
5
@KonradRudolph security unlock-keychain -p <password> login.keychainde CI.
Equilíbrio de
1
@KonradRudolph não é necessário fornecer uma senha para a chave de desbloqueio de segurança se você permitiu o codesign para acessar uma chave privada. Basta deixar uma string vazia como senha.
Kamil Szostakowski
1
@KonradRudolph provavelmente ainda não é o ideal, mas você poderia mover esse comando de desbloqueio para ~/.bash_profileque o keychain desbloqueie na inicialização do cliente SSH, mas você não precisa fazer referência a ele em seu script de CI
sschilli 09/10/19
17

Encontrei o mesmo problema, reinicio meu macOS e funciona.

Na China, temos um ditado entre os desenvolvedores:

Pequenos problemas, apenas reinicie. Problemas grandes, deve reinstalar.

Às vezes, o ditado acima irá ajudá-lo muito!

Ifeegoo
fonte
7
Dizemos na América - 'Nunca reinicie o hardware antigo'
Brant
@Brant Por que você tem esse ditado? É interessante.
ifeegoo
Brincadeira - mas tivemos um problema semelhante e finalmente reiniciámos um servidor antigo.
Brant
1
@ifeegoo Servidores antigos podem ter problemas para inicializar novamente (talvez o sistema operacional tenha se atualizado? talvez alguém tenha quebrado os scripts de inicialização?) ou precisam de algum procedimento de inicialização manual que ninguém que está disponível conhece. Você não pode saber antes de tentar. Talvez a BIOS da ROM tivesse estragado. É apenas uma daquelas coisas que não devem ser um problema em um ambiente bem cuidado, mas você não sabe antes de tentar e prefere não tentar.
Lassi Kinnunen de
1
@LassiKinnunen Você está certo, somos desenvolvedores mobile para Android e iOS, então esse tipo de situação não se preocupa com os servidores. Os servidores são realmente perigosos, não é situável.
ifeegoo
8

Caso ajude outra pessoa, encontrei um errSecInternalComponenterro com codesignporque estava executando-o em uma sessão ssh para minha máquina macOS. A execução do mesmo comando em uma janela de terminal na própria máquina macOS funcionou.

Presumivelmente, isso ocorre porque codesignprecisa de acesso à chave privada das chaves de login.

Executar security unlock-keychain login.keychain(como explicado pela resposta de cbracken ) da mesma sessão também deve funcionar.

Jamesdlin
fonte
Isso é muito estranho, mesmo executando o comando de desbloqueio das chaves parece falhar silenciosamente porque o código de código ainda não funciona. Mas executar os mesmos comandos usando a área de trabalho remota (em vez de SSH) funciona bem.
Máx.
2

Se tentar assinar a partir do comando ssh run:

security unlock-keychain login.keychain

antes de tentar assinar o pacote de aplicativos

ou da IU

Atualize o controle de acesso da chave para "Permitir que todos os aplicativos acessem este item"

Obrigado a @Equilibrium e @Jon McClung

Stas S
fonte
2

Eu tive o mesmo problema Descobri que o problema é com o código de assinatura do aplicativo.

Opened the developer account and accepted the updated agreement and it worked.  

insira a descrição da imagem aqui

sahiljain
fonte
2

Corri security unlock-keychain login.keychaine minha senha de login não funcionou. Então eu reiniciei e apenas executei o Xcode novamente e funcionou. Executar o comando também funciona. Problema estranho.

sunapi386
fonte
2

Conforme apontado por @Equilibrium em um dos comentários, se você estiver na linha de comando env. como Jenkins (meu caso), você pode precisar passar a senha para o comando security-unlock mencionado nas soluções.

Então, em vez de usar,

security unlock-keychain login.keychain

usar:

security unlock-keychain -p <login-keychain-password> <path-to-login-keychain>

onde as chaves do caminho para o login podem ser $ HOME / Library / Keychains / login.keychain (meu caso) ou simplesmente login.keychain

Mohit Tater
fonte
Sua resposta é baseada na resposta @equilibrium, mas vou concebê-la. No Bamboo CI me ajudei a comandar a segurança desbloquear-chave-chave -p {conta-senha} login.keychain
A.Kant
2

para qualquer um que encontrou esse problema de jenkins e ssh:

alta possibilidade de você não ter concedido acesso à chave privada no keychain, eu tentei, mas não tenho certeza porque tudo isso não está funcionando:

  1. arquivo de importação de segurança .p12 com -A ou -T / usr / bin / codesign
  2. security set-key-partition-list -S apple-tool:, apple:, codesign: -s -k # {password} # {keychainPath}
  3. altere todos os perfis de provisionamento para [UUID] .mobileprovision e copie-os para '~ / Library / MobileDevice / Provisioning \ Profiles' no servidor jenkins
  4. limpe os dados derivados e reinicie o servidor jenkins
  5. certifique-se de que as chaves padrão sejam chaves de login e as desbloqueie.

finalmente resolvido por:

1.ssh [usuário] @ [jenkinsServerIP] -L 5900: localhost: 5900, faça login no servidor jenkins

2. abrir 'vnc: // localhost'

isso irá lançar uma tela remota, se o seu servidor jenkins permitir isso ...

em seguida, abra keychain.app para conceder acesso de / usr / bin / codesign à chave privada

boa sorte

Xi Zhang
fonte
1

Apenas tente uma vez usando o terminal mac, mas não a partir da sessão SSH

security unlock-keychain login.keychain

E escolha sempre permitir na caixa de diálogo exibida. E então você pode xcodebuild na sessão remota.

Felix
fonte
1

Clique com o botão direito do mouse na chave privada associada ao certificado de assinatura de código no keychain e, em seguida, clique em 'permitir todos os aplicativos' em vez de confiar em um prompt que corrigiu para mim, já que a compilação estava acontecendo via ssh.

Pelota
fonte
0

Eu precisei:

1) excluir o certificado associado ao projeto

2) Voltar para o Xcode e revogar o certificado do aplicativo

3) O Xcode requer um novo certificado

4) Bloquear todo o KeyChain

5) Limpe o projeto

6) Reconstruir

É isso aí. Espero que ajude a alguém.

Andrés Felipe
fonte
0

Os métodos acima são inúteis para mim.

Resolvi isso:

  1. Abra o acesso do keychain.
  2. Clique no menu de login.
  3. Remova todos os certificados pessoais.
  4. Limpe o projeto.
  5. Reconstruir.

É isso aí. Espero que ajude a alguém.

yerwoo_gmail
fonte