Use o LogBrew Swift 0.1.6 ou posterior. Para fazer upload de artefatos de
depuração, use a CLI nativa do LogBrew 0.1.24 ou posterior.
Planeje o escopo da captura
Confira quando seu aplicativo pode reenviar cada tipo de falha.
Defina o valor da versão implantada antes do build. Ele precisa identificar a
versão e o build do aplicativo. Use o mesmo valor no SDK, no upload do dSYM e
no filtro de problemas.
Não anexe payloads de usuários, corpos de requisição ou cabeçalhos aos
metadados do crash.
Adicione o produto de crash
Primeiro, configure a telemetria do SDK no seu aplicativo. O reenvio usa esseclient e esse transport.
Adicione o SDK público pelo Swift Package Manager.
LogBrew para enviar telemetria. Adicione LogBrewCrash
só quando o aplicativo ativar explicitamente a captura nativa de crashes ou
de travamentos.
A integração de captura é compatível com iOS 15 ou posterior. Mantenha um
único objeto de captura, controlado pelo aplicativo, porque os handlers
nativos de erros fatais valem para o processo inteiro.
Configure uma identidade exata
Use o mesmo projeto, a mesma versão, o mesmo ambiente e o mesmo serviço na configuração em tempo de execução e no upload do artefato. O LogBrew não deriva nem substitui esses valores.NativeCrashConfiguration tem dois limites opcionais:
Um valor fora da faixa faz a configuração lançar
crash_invalid_configuration.
Ative a captura de travamentos
A captura de travamentos fica desativada quandowatchdog é nil. Para
ativá-la, substitua a declaração de watchdog acima antes de chamar
install():
artifactIdentity. Sem esse valor, a configuração lança
crash_invalid_configuration.
Mantenha um único objeto crashCapture durante toda a vida do processo. Um
segundo objeto de captura não consegue ser instalado. A chamada install()
dele lança crash_capture_owned. Para mudar o limite de tempo, use o novo
valor na próxima inicialização do aplicativo.
Um travamento recuperado é reenviado com crash.handled definido como
true. Um travamento ainda em andamento quando o processo foi encerrado é
reenviado com crash.handled definido como false.
As duas formas incluem os metadados numéricos durationMs. Elas mantêm a
mesma identidade de artefato usada pelos frames de crashes fatais.
O watchdog pausa enquanto o aplicativo está inativo ou sob um depurador. Ele
também suprime a captura durante pressão térmica séria.
Um limite de tempo curto pode relatar como travamento um trabalho normal da
thread principal. Teste o limite de tempo com a configuração de build que você
publica. O estado “tratado” descreve a recuperação. Ele não marca o problema
como resolvido. Um travamento tratado ainda bloqueou a interface, então
revise-o também.
Reenvie depois da inicialização
Depois de instalar a captura, reenvie os relatórios pendentes pelo cliente do SDK.maxReplayBytes. Confira as três contagens. Uma contagem de pendentes
igual a zero, por si só, não comprova a entrega.
Ative a entrega persistente antes do reenvio quando uma requisição com falha
precisar sobreviver a outra reinicialização. Não chame purge() durante a
recuperação rotineira de rede ou de autenticação.
Faça upload do dSYM correspondente
Gere o archive do aplicativo com as informações de depuração ativadas. Guarde o dSYM do build exato que os usuários executam. Inspecione os UUIDs de imagem dele.--expect-image-uuid para cada arquitetura necessária. O comando falha
quando o conjunto de UUIDs encontrado é diferente do conjunto esperado.
Confira o acesso da conta. Depois, execute o mesmo comando sem --dry-run.
status do JSON mostra o resultado:
Uma máquina de build pode fazer upload com uma chave de artefato do projeto
em
LOGBREW_TOKEN, em vez do acesso da conta. Crie a chave como mostrado em
Criar uma chave de artefato.
Esse upload informa uploaded. Depois, verifique cada identidade com o acesso
da conta:
status: "found" confirma o artefato. status: "missing" significa que o
LogBrew não tem nenhum artefato para essa identidade.
A resolução usa o UUID da imagem e a identidade completa do artefato, não o
nome do arquivo de origem. Um novo build do mesmo código pode ter UUIDs
diferentes. Faça upload do pacote dSYM exato, não de um diretório de build
inteiro.
Verifique a leitura no LogBrew
Filtre a lista de problemas com o mesmo escopo de execução. Este exemplo seleciona problemasunresolved. Um problema resolvido ou arquivado não
aparece.
symbolication. Este exemplo
mostra campos selecionados de um problema com um frame resolvido, não a
resposta completa.
Leia as evidências do crash
Cada frame tem o própriostatus. O campo symbolication.status usa os
mesmos valores:
Mantenha um frame não resolvido como não resolvido nas suas anotações. Não o
relate como uma pilha vazia.
O LogBrew resolve os frames quando você lê o problema. Um dSYM com upload
feito depois pode resolver frames de um evento anterior. Ele não pode adicionar
frames que o evento não capturou.
Um frame da aplicação restringe a busca no código, mas não comprova a causa.
Para ver os breadcrumbs, a cadeia de exceções e as evidências de trace, leia a
investigação do problema:
source: "symbolicated" veio de um artefato do
upload. Um frame com source: "captured" é o local que o aplicativo enviou.
Veja os campos da resposta em
Investigar um problema.
Mantenha o escopo completo de projeto, versão, ambiente e serviço em todas as
leituras. Não amplie para outros projetos uma busca que falhou.
Verifique a configuração de produção
Use uma falha de teste aprovada no build implantado. Nunca use a ação de um cliente como gatilho. Confira cada item na ordem e pare na primeira falha:- A identidade em tempo de execução corresponde à identidade do artefato do upload.
- Uma inicialização posterior reenvia um evento confirmado, com zero relatórios descartados e zero pendentes.
- A lista de problemas com escopo retorna o problema de teste com o estado “tratado” esperado.
- O frame da aplicação esperado é resolvido.
- Uma inicialização limpa posterior não adiciona outra ocorrência.
Recupere com segurança
Para a investigação geral de problemas, use
Investigar um problema com a API.
