O Crashlytics não está enviando relatório de falha do iPhone

86

Eu configurei o Crashlytics em meu único aplicativo iOS e instalei o aplicativo em um dispositivo real. Meu painel Crashlytics está exibindo isso, eu adicionei o aplicativo com sucesso. No entanto, não está enviando relatório de falha. A velocidade da minha internet não é tão boa. Mas posso verificar meus e-mails neste dispositivo. Alguém consegue adivinhar onde está o problema?

Farhad Rubel
fonte
5
Estou tendo o mesmo problema com o serviço Crashlytics. Relatórios de falhas do dispositivo nunca são enviados (na minha experiência) - apenas do simulador. Acabei usando o relatório de falhas e o tratamento de erros do Crittercism.
Sam Spencer
O mesmo está acontecendo comigo. Experimente seu aplicativo com outro dispositivo diferente do dispositivo de desenvolvimento real, dessa forma você pode obter relatórios de falhas.
Samet DEDE
Sim, estou usando meu dispositivo de desenvolvimento. Isso está causando o problema?
farhad rubel
1
Sem uma descrição completa da configuração ou projeto de teste, isso é impossível de responder. Você deve entrar em contato com o suporte crashlytics. Adivinhação selvagem não ajuda.
Kerni
3
Estou tão surpreso que alguém do Crashlytics viu meu post no StackOverflow e me contatou por e-mail; Ele está me ajudando a resolver esse problema. Vamos ver o que acontece.
farhad rubel

Respostas:

84

O depurador Xcode NÃO permite que o Crashlytics processe relatórios de falhas. Sim, isso parece estranho até para mim quando eu li aquela primeira vez, mas é um fato ( Fonte ). Esse é o motivo pelo qual nunca vemos relatórios de travamento quando:
- executando o aplicativo no Simulador
- executando o aplicativo no iDevice por compilar e executar diretamente do Xcode com o depurador ativado.

Para garantir que uma falha seja relatada durante o teste ( copiado do site de suporte do Crashlytics ):
1. Inicie o simulador
2. Pressione parar
3. Inicie seu aplicativo e force uma falha
4. Reinicie o aplicativo do simulador
5. Consulte o relatório de falha no painel da web.

EDITAR:

Adicionada uma referência; O Crashlytics também fornece um pequeno artigo sobre uma maneira rápida de forçar uma falha .

Saurabh Hooda
fonte
6
Isso me ajudou. Também descobri isso em alguns casos. O Crashlytics não enviará o relatório de falha a menos que o aplicativo seja aberto novamente. Para reiterar: o usuário experimenta uma falha. O usuário reabre o aplicativo. O Crashlytics envia o relatório de falha anterior.
tambykojak
1
@tambykojak isso provavelmente se deve ao fato de que as falhas do iOS são bastante voláteis na maioria dos casos e o caminho mais seguro é enviar um relatório de falha no próximo carregamento do aplicativo do que enviá-lo imediatamente. Muitas ferramentas de Crash Reporting usam esse paradigma no iOS e em outros gerenciadores de falhas não VM.
pixelknitter
2
Obrigado. Isso deve ser marcado como resposta correta :)
iMemon
Eu preciso fazer upload de algum dsyms neste caso? Se sim, onde posso encontrá-los?
SoliQuiD
links estão mortos.
luky
67

Já é tarde, mas trabalho 100%

Faça algumas alterações nas configurações de construção do projeto, como na imagem abaixo

insira a descrição da imagem aqui

e siga estas instruções.

Anand Suthar
fonte
Mesmo depois de desabilitar o Bitcode, eu ainda tinha erros de dSYMS ausentes de vez em quando, e 100% do tempo ao depurar com o simulador. Isso consertou. Obrigado.
user3344977
Ao alterar essa configuração, consegui ver travamentos na plataforma
firebase
21

O principal motivo pelo qual qualquer relator de falhas não funcionará no iOS é a interferência de diferentes relatores de falhas. No entanto, com o Crashlytics especificamente, pode haver algo específico para eles fazendo com que o relatório de falha não seja relatado.

O depurador Xcode NÃO permite que o Any Crash Reporter processe relatórios de falhas. Isso ocorre porque o XCode substitui todos os ganchos nos retornos de chamada de tratamento de travamento. Isso só acontece quando:

  • executando o aplicativo no simulador (com o depurador ativado)
  • executando o aplicativo no iDevice por compilar e executar diretamente do Xcode com o depurador ativado.

Para garantir que uma falha seja relatada durante o teste ( http://support.crashlytics.com/knowledgebase/articles/92523-why-can-ti-have-xcode-connected- ):

  1. Simulador de lançamento
  2. Pressione parar
  3. Inicie seu aplicativo e force uma falha
  4. Reinicie o aplicativo do simulador
  5. Veja o relatório de falha no painel da web.

Embora um vídeo muito antigo ainda seja relevante, aqui está um vídeo das etapas acima (exemplo do Crittercism): https://www.youtube.com/watch?v=sU6Su3PBFH4

pixelknitter
fonte
1
O Crashlytics desativa a si mesmo ao detectar um depurador conectado. Não porque não funcionará, mas porque impedirá o depurador de funcionar corretamente. O Crashlytics usa os mesmos mecanismos que o próprio depurador usa e seria realmente frustrante para o SDK bagunçar o fluxo normal de depuração. Para referência, escrevi a maior parte do SDK do Crashlytics.
Mattie
9

Para mim, o problema era que o dispositivo estava conectado ao meu Mac :) Desta fonte :

Além disso, se seu dispositivo estiver conectado ao Mac, o depurador do XCode também entrará em ação. Portanto, basta desconectar o dispositivo antes de testar :)

Fengson
fonte
7

Eu encontrei a solução usando as seguintes etapas
1. Vá para Editar Esquema 2. Execute -> Informações 3. Altere a Configuração de Compilação para liberar. Agora execute o aplicativo travá-lo. Você receberá uma correspondência.

Gurjinder Singh
fonte
6

Recentemente, encontramos esse problema e descobri que em algum lugar ao longo do caminho o script de construção foi removido. Adicioná-lo de volta com o seguinte corrigiu o problema para nós:
./Crashlytics.framework/run <your_api_key> <build_secret>

Observação: ao usar Cocoapods, você desejará o seguinte em vez do acima ( fonte ): ./Pods/CrashlyticsFramework/Crashlytics.framework/run

Adicionando um script de construção:

  1. Para adicionar uma Run Script Build Phase no Xcode 6, selecione o destino do aplicativo em seu projeto e, em seguida, selecione "Build Phases".
  2. Clique no pequeno ícone "mais" e selecione "Nova fase de criação de script de execução".
  3. Agora você deve ver uma seção Run Script no meio das opções da fase Build, conforme mostrado acima.
  4. Dentro do corpo da fase Run Script Build, cole o script.

A citação acima vem do tutorial visual do Crashlytics , referenciado nesta postagem .

Observação: originalmente postei esta resposta literalmente para o código de erro do Crashlytics: 202 ao enviar arquivos .

James Nelson
fonte
Isso parece ter me ajudado.
Chris Prince
1
Eu usei o fabric anteriormente para integração com o Twitter agora eu quero o crashlytics também adicionei o framework e segui todas as instruções, mas não recebi nenhum relatório de falha no painel, por favor me ajude
RameshIos
@iOS_Ramesh Eu adoraria tentar te ajudar, mas sem saber mais vai ser difícil. Para fazer isso, você deve abrir uma nova pergunta descrevendo onde você está (a etapa que você seguiu para integrar, quaisquer trechos de código apropriados e qualquer feedback que você está recebendo do Crashlytics ou do console).
James Nelson de
postei
1
Obrigado pela dica. Tínhamos ["Release" = "$ {CONFIGURATION}"] verificado em nosso Run Script e renomeamos nossa configuração de Release.
Marián Černý
4

Do site RayWenderlich:

Você não receberá nenhum relatório de falha se o Xcode interceptar o evento de falha! Para fazer todos os exemplos abaixo funcionarem, você deve construir e executar o aplicativo e, em seguida, clicar no botão parar no Xcode. Dessa forma, você terá a versão mais recente instalada no dispositivo. Uma vez feito isso, você pode iniciar o aplicativo no próprio dispositivo e, em seguida, travá-lo o quanto quiser! Todas as falhas em seu dispositivo iOS serão detectadas e enviadas para o componente de servidor do serviço que você integrou ao aplicativo. Os relatórios de falhas geralmente são enviados ao servidor na próxima vez que você inicia o aplicativo, portanto, as etapas a seguir para gerar um relatório de falhas no servidor são as seguintes: Compilar e executar no Xcode. Pressione o botão parar. Execute o aplicativo em seu dispositivo iOS. Faça o aplicativo travar. Execute o aplicativo novamente.

Michel Goñi
fonte
3

O Crashlytics funciona para mim até agora. Não sei por que, mas agora não funciona.

Você deve ativar o modo de depuração por

[Crashlytics sharedInstance].debugMode = YES;

Meu problema é aqui Código de erro Crashlytics: 202 ao enviar arquivos :(

Tony
fonte
3

Certifique-se de não forçar a falha muito cedo.

Definir [Crashlytics sharedInstance].debugModecomo YES;

Cuidado com

Crashlytics] Settings loaded

nos logs do console do Xcode.

Em seguida, force a falha e reinicie o aplicativo, e a falha será relatada agora.

Erkanyildiz
fonte
3

Eu tive um problema semelhante ao tentar o código de falha de teste.

Crashlytics.sharedInstance().crash()

Eu estava executando meu aplicativo em um dispositivo, sem Xcode, e o travamento não aparecia no Crashlytics Dashboard. O que funcionou para mim foi a seguinte dica do site do Crashlytics:

  • Certifique-se de iniciar o aplicativo após travá-lo, para que a falha possa ser carregada

Comentei a chamada crash () acima e executei o aplicativo novamente. Em seguida, a falha apareceu no painel.

Ravi
fonte
2

Isso é para o xcode 9, do crashlytics 3.4.0 PASSO 1 PASSO 2

Depois de fazer isso, seja paciente e espere alguns minutos.

Ted
fonte
1

Você tentou executar [[Crashlytics sharedInstance] crash]em um dispositivo e ver se isso é relatado? Existem alguns motivos pelos quais o Crashlytics pode não funcionar, incluindo outros relatores de erros etc.

Patrick Tescher
fonte
Não, estou usando int * x = NULL; * x = 42; código para ver o relatório de falha. Além disso, meu aplicativo também está travando para diferentes modelos de dados principais.
Farhad Rubel
1

Se você não carregar o arquivo dSYM, o Crashlytics não mostrará sua falha, mesmo que o relatório seja carregado com sucesso.

Você pode encontrar esse problema se tiver configurado o script de construção para ser executado apenas no servidor CI. Então, se você copiou seu aplicativo para o seu telefone via xcode e o executou sem ser anexado ao depurador, o relatório será carregado, mas ignorado, devido à falta do arquivo dSYM.

Thetrutz
fonte
1

Às vezes, leva algum tempo para os logs aparecerem. Consigo encontrá-los após 15-20 minutos

Relaxado
fonte
0

Um dos problemas, acho que na fase de execução de script, deve ser uma fase de execução de script separada para CrashLytics. Quando o script foi executado

./Fabric.framework/run

Com alguns dos meus outros scripts, tudo estava ok, CrashLytics log show report enviado, mas nada estava na interface da web.

Quando adiciono outra fase de script Run apenas com a execução do Fabric, parece mágica :)

Minha primeira tentativa foi com cocoapods, mas não funcionou. Quando eu adiciono manualmente toda a estrutura e uma fase de script de execução separada que funcionou.

karim
fonte
-1

Isso funcionou para mim,

Se você estiver testando no iDevice, apenas desconecte o iDevice do seu Xcode e execute o aplicativo. Agora, se travou, será atualizado no painel.

Mohammad Zaid Pathan
fonte
-3

Resolvi desmarcando a opção "Executar script somente ao instalar" em Executar script (um para Fabric (crashlytics))

insira a descrição da imagem aqui

Shaz
fonte
Esse é apenas o script que carrega os símbolos para o Crashlytics; como isso resolve o problema de relatórios de falha não serem enviados? Quais etapas você deve seguir para evitar o uso do Crashlytics quando os símbolos não foram enviados? Essa resposta é enganosa e simplesmente errada.
Droppy