Se você está trabalhando em um projeto mobile cross platform que usa o keychain, ao executar em um simulador, possivelmente já se deparou em algum momento com este erro:

Error: Error Domain=NSOSStatusErrorDomain Code=-34018 "The operation couldn’t be completed. (OSStatus error -34018.)"

Ou com qualquer outra mensagem que cita o código de erro -34018 do iOS

Bem, eu tive esse erro um projeto React Native. Busquei a solução no google mas, além de muita coisa somente em inglês, não vi nenhuma resposta clara que levasse a solução do problema.

Mas por que este erro acontece? Como resolve-lo?

Pois bem, este erro ocorre principalmente ao executar o app utilizando o simulador do iOS, porque o simulador utiliza o keychain da máquina. Para usa-lo, seu app precisar ter um arquivo Entitlements.plist. Para que o arquivo entitlement seja compilado corretamente e te garanta acesso ao keychain, você precisará assinar seu app, provendo um certificado e um provisiong profile válidos, ainda que você esteja executando no simulador.

Este artigo da apple também me ajudou a resolver o problema, e te mostra alguns troubleshootings para verificar o estado do entitlement após a compliação https://developer.apple.com/forums/thread/114456

Libs como react-native-senstive-info, @react-native-firebase ou qualquer outra que acesse o keychain, irá na verdade, acessar o keychain do seu mac. E para que o app possa acessar o keychain do mac, você precisará compartilhar o keychain, adicionando um capability para seu app.

Para fazer isso, abra seu projeto no XCode, na navegação, clique no seu app. Depois, no painel central, selecione Signing & Capabilities:

xcode signning & capabilities para adicionar o keychain

Depois clique em + Capability e busque por Keychain

buscando pelo capability keychain

Após adicionar a capability você verá um novo item no painel

resultado após adicionar o keychain

Clique no ícone + para adicionar seu app id

adicionando o app id ao keychain

Ah, por último mas não menos importante, no Build Setting do seu app, no grupo User-Defined, verifique se você não possui a propriedade CODE_SIGNNING_ALOWED e CODE_SIGNNING_REQUIRED setadas para NO em Debug, se tiver, troque para YES.

verificando CODE SIGNNING

É isso!

Imagem utilizada no post https://pixabay.com/pt/photos/computador-seguran%c3%a7a-cadeado-hacker-1591018/

Modificado pela ultima vez: 11 de maio de 2023

Comentários

Escreva uma resposta ou comentário

Seu endereço de e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.