Desarrolladores iOS: cuidado con las rutas largas de archivos


Intento mantener mi blogging orientado a los clientes y al público en general, pero hoy tengo un hallazgo muy interesante para compartir con los desarrolladores de iOS. ( Si se topa con esta publicación porque tiene una copia de seguridad corrupta, ¡puede encontrar este artículo más útil! )

La longitud máxima de la ruta en iOS es actualmente 1024. La mayoría de los desarrolladores no crearán archivos que lleguen a ese límite (yay), pero si te estás acercando, es probable que termines probando la ruta completa de tu archivo frente a la variable PATH_MAX constante en syslimits.h. Todo esto es encantador, y sus nombres de archivo serán lo suficientemente cortos como para caber en el dispositivo sin problemas. Sin embargo, sus clientes pueden tener un gran inconveniente cuando intentan restaurar copias de seguridad en itunes o mediante iCloud.

iOS copia todos los archivos en un directorio temporal como parte del proceso de restauración. La ubicación del directorio temporal puede tener una ruta de acceso totalmente calificada más larga que la ubicación en la que normalmente reside su archivo durante el funcionamiento normal. Esta ubicación más larga hará que la copia de seguridad se informe como corrupta.

El camino más corto que he visto romper una restauración en este punto es 932 caracteres de la raíz de la carpeta de la zona de pruebas de la aplicación. Si incluimos la carpeta típica de sandbox (otros 85 caracteres), eso es 1017. Recomiendo encarecidamente PATH_MAX - 7 (exclusivo) como su límite en lugar de PATH_MAX (exclusivo) 1 .


  1. Nota al pie molesto, para aquellos desesperados por nombres de archivo largos. El límite 932 es en realidad para un directorio, porque lstat pega la barra al final, y con la carpeta del contenedor de respaldo, empuja el nombre de archivo a 1024 caracteres. Esa es mi forma de decir que probablemente puedas exprimir un personaje más en tu límite si estás tratando con un archivo y no con un nombre de directorio.  


0 Comments