Pergunta

Quando eu faço desenvolvimento web, eu uso um logger feitos que as capturas erros fatais e acrescenta um rastreio para um arquivo e exibe uma mensagem para o usuário. Eu ocasionalmente pode olhar para ver se o arquivo mudou, o que significa, algum usuário encontrou um erro e eu posso cavar para ver o que eles encontraram.

Eu gostaria de algo semelhante no iPhone, com algumas ressalvas:

  • Ao desenvolver, deve ser trivial para redefinir a lista de erros ou desativar a notificação.
  • Ao desenvolver, as mensagens de erro também deve aparecer em algum lugar óbvio, como na tela em no console
  • Uma vez implantado, os erros devem educadamente ser enviado para a nave-mãe para análise (para uma correção de bug na próxima atualização)
  • Ativar log de Trace / Informações ao tentar rastrear um problema durante o desenvolvimento
  • Desligue o registro do console para 'Release' para acelerar as coisas para o usuário
  • deve limpar-se depois de si, de modo a ser um bom cidadão no telefone

alguns links relacionados

Ele parece não haveria um conjunto de ferramentas comum de fazer isso - como você lida com isso

[Update outubro 2011] Tem havido alguns desenvolvimentos, de diferentes maturidade ...

  • PLCrashReporter .
  • Quincy fica no topo do PLC.
  • BugSense repórter acidente comercial.
  • Crittercism acidente e relatório de erros (alguns pacotes gratuitos, alguns pagos).
  • teste de vôo agora tem um SDK que as capturas acidentes (mas não ainda para a App Store aplicativos, apenas dev apps).
  • Como teste de vôo, hóquei visa combinar distribuição ad hoc com os relatórios de falhas.
Foi útil?

Solução

Aqui está o que fazer:

  • Deixe o iPhone lidar com seu próprio despejos através do App Store existente mecanismos . Atualizar : tendo encontrado iTunes Connect para não ser confiável no fornecimento de relatórios de falhas, eu recomendo usar Tecido / Crashlytics , ou um concorrente como Crittercism ou Rollbar .
  • O nosso produto lançado tem nenhum traço, este parece ser consistente com o que a maioria dos outros aplicativos do iPhone fazer.
  • Se um erro é informado então reproduzi-lo usando uma compilação rastreado.

Em mais detalhes:

  • Nós definir macros para NSLog traço em vários níveis diferentes de granularidade.
  • Use Xcode configurações de compilação para alterar o nível de rastreio, que controla a quantidade de traço é compilado no produto, por exemplo, existem configurações de compilação de lançamento e de depuração.
  • Se nenhum nível de rastreio é definido, em seguida, vamos mostrar traço cheio na Simulator, e nenhum vestígio quando executado em um dispositivo real.

Eu incluí código de exemplo abaixo mostra como nós escrevemos isso, eo que os olhares saída como.

Nós definir vários níveis de traços diferentes para que desenvolvedores possam identificar quais linhas de traço são importantes, e pode filtrar detalhes de nível inferior se eles querem.

Código Exemplo:

- (void)myMethod:(NSObject *)xiObj
{
  TRC_ENTRY;
  TRC_DBG(@"Boring low level stuff");
  TRC_NRM(@"Higher level trace for more important info");
  TRC_ALT(@"Really important trace, something bad is happening");
  TRC_ERR(@"Error, this indicates a coding bug or unexpected condition");
  TRC_EXIT;
}

Exemplo saída de rastreio:

2009-09-11 14:22:48.051 MyApp[3122:207] ENTRY:+[MyClass myMethod:]
2009-09-11 14:22:48.063 MyApp[3122:207] DEBUG:+[MyClass myMethod:]:Boring low level stuff
2009-09-11 14:22:48.063 MyApp[3122:207] NORMAL:+[MyClass myMethod:]:Higher level trace for more important info
2009-09-11 14:22:48.063 MyApp[3122:207] ALERT:+[MyClass myMethod:]:Really important trace, something bad is happening
2009-09-11 14:22:48.063 MyApp[3122:207] ERROR:+[MyClass myMethod:]:Error, this indicates a coding bug or unexpected condition
2009-09-11 14:22:48.073 MyApp[3122:207] EXIT:+[MyClass myMethod:]

Nossas definições traço:

#ifndef TRC_LEVEL
#if TARGET_IPHONE_SIMULATOR != 0
#define TRC_LEVEL 0
#else
#define TRC_LEVEL 5
#endif
#endif

/*****************************************************************************/
/* Entry/exit trace macros                                                   */
/*****************************************************************************/
#if TRC_LEVEL == 0
#define TRC_ENTRY    NSLog(@"ENTRY: %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#define TRC_EXIT     NSLog(@"EXIT:  %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#else
#define TRC_ENTRY
#define TRC_EXIT
#endif

/*****************************************************************************/
/* Debug trace macros                                                        */
/*****************************************************************************/
#if (TRC_LEVEL <= 1)
#define TRC_DBG(A, ...) NSLog(@"DEBUG: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_DBG(A, ...)
#endif

#if (TRC_LEVEL <= 2)
#define TRC_NRM(A, ...) NSLog(@"NORMAL:%s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_NRM(A, ...)
#endif

#if (TRC_LEVEL <= 3)
#define TRC_ALT(A, ...) NSLog(@"ALERT: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ALT(A, ...)
#endif

#if (TRC_LEVEL <= 4)
#define TRC_ERR(A, ...) NSLog(@"ERROR: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ERR(A, ...)
#endif

configurações Xcode:

configurações de compilação no Xcode, escolha "Adicionar configuração definida pelo usuário" (clicando no pequeno cog na parte inferior esquerda do ecrã de configuração de compilação), em seguida, definir uma nova configuração chamada GCC_PREPROCESSOR_DEFINITIONS e dar-lhe o valor TRC_LEVEL=0.

A única sutileza é que Xcode não sabe fazer uma compilação limpa se você alterar essa configuração, por isso lembre-se de fazer manualmente um limpa se você alterá-lo.

Outras dicas

Apple recolhe automaticamente os registros de acidentes de usuários para você, e você pode baixá-los do iTunes conectar.

Se isso não for suficiente para você, eu não estou ciente de um kit de ferramentas, mas eu não gostaria de rolo algo em meu próprio, pessoalmente. Parece muito esforço para desenvolver algo robusto, pode levantar preocupações com a privacidade, e, no final, com 100,000K aplicativos na App Store, quantos usuários usaria seu aplicativo novamente depois de descobrir que era de buggy?

Você sabe que CrashReporter para iPhone existe?

Há um repositório no github que demos esse código.

Tem alguns recursos interessantes como Maping o rastreamento de pilha para o seu código de e administra algumas coisas específicos git, como hashes de versão.

Eu recomendo CocoaLumberJack de Robbie Hanson: https://github.com/robbiehanson/CocoaLumberjack

É muito flexível e poderosa talvez até um pouco excessivo se abusado. Suporta diferentes níveis de exploração madeireira. Logging de arquivos pode ser ligado com um par de linhas de código e até mesmo ser enviados através da rede.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top