Apple recomienda no confiar en el fileExistAtPath: método. A menudo es mejor simplemente intentar abrir un archivo y lidiar con el error si el archivo no existe.
Referencia de clase NSFileManager
Nota: No se recomienda intentar predicar el comportamiento en función del estado actual del sistema de archivos o de un archivo en particular en el sistema de archivos. Hacerlo puede causar un comportamiento extraño o condiciones de carrera. Es mucho mejor intentar una operación (como cargar un archivo o crear un directorio), verificar si hay errores y manejarlos con gracia que tratar de averiguar con anticipación si la operación tendrá éxito. Para obtener más información sobre las condiciones de carrera del sistema de archivos, consulte “Condiciones de carrera y operaciones de archivos seguros” en la Guía de codificación segura.
De la guía de codificación segura.
Para evitar esto, los programas a menudo verifican que un archivo temporal con un nombre específico no exista en el directorio de destino. Si existe dicho archivo, la aplicación lo elimina o elige un nuevo nombre para el archivo temporal para evitar conflictos. Si el archivo no existe, la aplicación abre el archivo para escribir, porque la rutina del sistema que abre un archivo para escribir crea automáticamente un nuevo archivo si no existe ninguno. Un atacante, al ejecutar continuamente un programa que crea un nuevo archivo temporal con el nombre apropiado, puede (con un poco de persistencia y suerte) crear el archivo en el intervalo entre el momento en que la aplicación verificó para asegurarse de que el archivo temporal no existiera y cuando lo abre para escribir. La aplicación luego abre el archivo del atacante y escribe en él (recuerde, la rutina del sistema abre un archivo existente si hay uno, y crea un nuevo archivo solo si no hay un archivo existente). El archivo del atacante puede tener diferentes permisos de acceso que el archivo temporal de la aplicación, por lo que el atacante puede leer el contenido. Alternativamente, el atacante podría tener el archivo ya abierto. El atacante podría reemplazar el archivo con un enlace duro o un enlace simbólico a otro archivo (ya sea propiedad del atacante o un archivo del sistema existente). Por ejemplo, el atacante podría reemplazar el archivo con un enlace simbólico al archivo de contraseña del sistema, de modo que después del ataque, las contraseñas del sistema se hayan dañado hasta el punto de que nadie, incluido el administrador del sistema, pueda iniciar sesión. Alternativamente, el atacante podría tener el archivo ya abierto. El atacante podría reemplazar el archivo con un enlace duro o un enlace simbólico a otro archivo (ya sea propiedad del atacante o un archivo del sistema existente). Por ejemplo, el atacante podría reemplazar el archivo con un enlace simbólico al archivo de contraseña del sistema, de modo que después del ataque, las contraseñas del sistema se hayan dañado hasta el punto de que nadie, incluido el administrador del sistema, pueda iniciar sesión. Alternativamente, el atacante podría tener el archivo ya abierto. El atacante podría reemplazar el archivo con un enlace duro o un enlace simbólico a otro archivo (ya sea propiedad del atacante o un archivo del sistema existente). Por ejemplo, el atacante podría reemplazar el archivo con un enlace simbólico al archivo de contraseña del sistema, de modo que después del ataque, las contraseñas del sistema se hayan dañado hasta el punto de que nadie, incluido el administrador del sistema, pueda iniciar sesión.