O Xcode permite que você (des) verifique as configurações de avisos específicos do compilador que podem alertá-lo sobre alguns tipos de código não utilizado. (Selecione o projeto na lista de origem e Arquivo> Obter informações e, em seguida, selecione a guia Compilar.) Aqui estão alguns (que aparecem para Clang e GCC 4.2 para mim) que podem ser de interesse:
- Funções não utilizadas
- Parâmetros não utilizados
- Valores não utilizados
Não vejo nenhuma opção para detectar importações não utilizadas, mas isso é um pouco mais simples - a abordagem de baixa tecnologia é apenas comentar as instruções de importação até obter um erro / aviso de compilação.
Os métodos Objective-C não utilizados são muito mais difíceis de detectar do que as funções C não utilizadas porque as mensagens são despachadas dinamicamente. Um aviso ou erro pode dizer que você tem um problema potencial, mas a falta de um não garante que você não terá erros de tempo de execução.
Editar: Outra boa maneira de detectar métodos (potencialmente) não utilizados é examinar a cobertura do código de execuções reais. Isso geralmente é feito em conjunto com o teste de unidade automatizado, mas não precisa ser.
Esta postagem do blog é uma introdução decente aos testes de unidade e cobertura de código usando Xcode. A seção sobre gcov
(que só funciona com código gerado pelo GCC, aliás) explica como fazer com que o Xcode construa um código instrumentado que possa registrar quantas vezes ele foi executado. Se você pegar uma versão instrumentada de seu aplicativo para dar uma volta no simulador e, em seguida, executar gcov nele, você pode ver qual código foi executado usando uma ferramenta como CoverStory (uma GUI bastante simplista) ou lcov
(scripts Perl para criar relatórios HTML) .
Eu uso gcov
e lcov
para CHDataStructures.framework e auto-gerar relatórios de cobertura após cada confirmação de SVN. Novamente, lembre-se de que não é aconselhável tratar a cobertura executada como uma medida definitiva de qual código está "morto", mas certamente pode ajudar a identificar métodos que você pode investigar mais profundamente.
Por último, já que você está tentando remover o código morto, acho que você também achará esta questão interessante:
id
, ou criar um seletor para chamar em tempo de execução, o analisador estático não pode garantir que o código realmente não é usado. Se o código que ainda é necessário for removido, é aí que você obteria erros de tempo de execução. Estou esquecendo de algo?