A Apple recomenda não confiar no método fileExistAtPath:. Geralmente, é melhor apenas tentar abrir um arquivo e lidar com o erro se o arquivo não existir.
Referência da classe NSFileManager
Nota: Não é recomendável tentar predicar o comportamento com base no estado atual do sistema de arquivos ou em um arquivo específico no sistema de arquivos. Fazer isso pode causar comportamentos estranhos ou condições de corrida. É muito melhor tentar uma operação (como carregar um arquivo ou criar um diretório), verificar se há erros e lidar com esses erros normalmente do que tentar descobrir com antecedência se a operação será bem-sucedida. Para obter mais informações sobre as condições de corrida do sistema de arquivos, consulte “Condições de corrida e operações seguras de arquivos” no Guia de codificação segura.
No guia de codificação seguro.
Para evitar isso, os programas costumam verificar se um arquivo temporário com um nome específico ainda não existe no diretório de destino. Se esse arquivo existir, o aplicativo o exclui ou escolhe um novo nome para o arquivo temporário para evitar conflitos. Se o arquivo não existir, o aplicativo abrirá o arquivo para gravação, porque a rotina do sistema que abre um arquivo para gravação cria automaticamente um novo arquivo, se não houver nenhum. Um invasor, executando continuamente um programa que cria um novo arquivo temporário com o nome apropriado, pode (com um pouco de persistência e alguma sorte) criar o arquivo no intervalo entre quando o aplicativo foi verificado para garantir que o arquivo temporário não existisse. e quando abre para escrever. O aplicativo abre o arquivo do invasor e grava nele (lembre-se, a rotina do sistema abre um arquivo existente, se houver um, e cria um novo arquivo apenas se não houver arquivo). O arquivo do invasor pode ter permissões de acesso diferentes do arquivo temporário do aplicativo, para que o invasor possa ler o conteúdo. Como alternativa, o invasor pode ter o arquivo já aberto. O invasor pode substituir o arquivo por um link físico ou simbólico para outro arquivo (de propriedade do invasor ou de um arquivo de sistema existente). Por exemplo, o invasor pode substituir o arquivo por um link simbólico para o arquivo de senha do sistema, para que, após o ataque, as senhas do sistema sejam corrompidas a ponto de ninguém, incluindo o administrador do sistema, poder efetuar login. Como alternativa, o invasor pode ter o arquivo já aberto. O invasor pode substituir o arquivo por um link físico ou simbólico para outro arquivo (de propriedade do invasor ou de um arquivo de sistema existente). Por exemplo, o invasor pode substituir o arquivo por um link simbólico para o arquivo de senha do sistema, para que, após o ataque, as senhas do sistema sejam corrompidas a ponto de ninguém, incluindo o administrador do sistema, poder efetuar login. Como alternativa, o invasor pode ter o arquivo já aberto. O invasor pode substituir o arquivo por um link físico ou simbólico para outro arquivo (de propriedade do invasor ou de um arquivo de sistema existente). Por exemplo, o invasor pode substituir o arquivo por um link simbólico para o arquivo de senha do sistema, para que, após o ataque, as senhas do sistema sejam corrompidas a ponto de ninguém, incluindo o administrador do sistema, poder efetuar login.