Como tratar avisos de clang de análise estática de código como erros no Xcode 3?
-
14-11-2019 - |
Pergunta
Pergunta
O RUN_CLANG_STATIC_ANALYZER ("Executar o Analisador Estático") definição de projecto tem encontrado problemas importantes em nosso projeto.Temos dirigiu-se a eles e nós queremos evitar futuros problemas de rastejar.
Estamos tentando chegar a clang avisos de análise para ser tratados como erros quebrar a nossa construir.Até agora sem sucesso, apesar de ter -Werror ("Tratar Avisos de Erros") habilitado.
Exemplo do Problema
A análise seguinte chamada gerada dentro do Xcode:
/Desenvolvedor/usr/bin/clang -x objective-c [...] --analisar [...]/TroubledCode.m-o [...]/TroubledTarget.construir/StaticAnalyzer/normal/i386/TroubledCode.plist
produz-se uma análise estática de código de aviso:
[...]/TroubledCode.m:38:34: warning: Potential leak of an object allocated on line 38 and stored into 'leakingManager'
Manager *leakingManager = [[Manager alloc] init];
^
1 warning generated.
mas Xcode relatórios", a Compilação foi bem Sucedida ...1 analisador de resultado".A solução que está procurando faria o exemplo acima gerar uma "Falha na Compilação".
Solução
Eu levei Jim conselhos e criado um script de compilação.
Para evitar falsos alarmes, eu fui pela dificuldade de se certificar de que ele ignora estranhas análise de resíduos.Esta solução deve funcionar quando a construção do Xcode IDE e a construção de seu projeto usando xcodebuild
.
Para ativar o Xcode 3 avisos de análise em erros de compilação:
- Faça duplo clique no projecto ou destino em questão.
- Sob a guia de Compilação, marque a caixa em Definições > Ligação > Escrever Link do Arquivo de Mapa
Essa configuração também é conhecida como LD_GENERATE_MAP_FILE
.
- Em "Grupos e Arquivos" > "Alvos", clique no triângulo de divulgação do destino você gostaria de adicionar esse recurso.
- Clique com o botão direito clique em "Vincular Binários Com Bibliotecas" fase.
- selecione Adicionar > Nova Fase de Compilação > Nova Executar o Script de construção Fase de
- opcional:Mudar o nome de "Executar Script" fase você acabou de adicionar ao "Tratar Clang Avisos de Erros".
- Faça duplo clique em novo script fase se ele já não estiver aberto.
Copie o conteúdo abaixo e cole-o no "Script" seção.
error_count=0
##
function verify_clang_analysis_at_path()
{
local analysis_path=$1
local plist_tool=/usr/libexec/PlistBuddy
local diagnostics=$($plist_tool -c "print diagnostics" $analysis_path)
if [[ $diagnostics != $'Array {\n}' ]]
then
((error_count++))
fi
}
function verify_clang_analysis_for_object_file()
{
local object_file=$1
local analysis_directory=$TARGET_TEMP_DIR/StaticAnalyzer/$CURRENT_VARIANT/$CURRENT_ARCH
local analysis_path=$analysis_directory/${object_file%.*}.plist
# if this object file corresponds to a source file that clang analyzed...
if [ -e $analysis_path ]
then
verify_clang_analysis_at_path $analysis_path
fi
}
##
object_directory=$OBJECT_FILE_DIR-$CURRENT_VARIANT/$CURRENT_ARCH
object_path_pattern=${object_directory}'/\(.\)\+\.o$'
index_pattern='\[[[:space:]0-9]*\][[:space:]]'
object_paths=$(
grep $object_path_pattern $LD_MAP_FILE_PATH | sed s/$index_pattern//
)
##
for object_path in $object_paths
do
object_file=${object_path##*/}
verify_clang_analysis_for_object_file $object_file
done
if [ $error_count -gt 0 ]
then
echo "Clang static code analysis failed for" $error_count "source file(s)."
fi
exit $error_count
Atualização
Mike Vosseller tem um versão atualizada do script para o Xcode 5.
Solução
Estivemos planejando ter um separado etapa de compilação para executar o analisador e verificar os resultados.Nós vamos falhar a construir em construir o servidor de que forma.Que não vai ajudá-lo localmente, embora.
Outras dicas
O Xcode tem um "Tratar avisos como erros de" caixa de seleção.Se você não pode encontrá-lo, o que tem sido dito por alguns de iPhone de projetos, basta adicionar "-Werror" para o seu WARNING_CFLAGS em Definições de Compilação para o seu alvo(s) em questão.