NSFileManager -createFileAtPath falla con NSInvalidArgumentException

Tal vez me haya perdido algo en la documentation, pero no puedo encontrar nada que diga que este comportamiento debería haber cambiado en iOS 8.

Mi aplicación establece el directory de trabajo actual en el directory Documents , luego trata de crear un file allí usando NSFileManager -createFileAtPath . Antes de iOS 8 esto funciona bien. En los dispositivos que ejecutan iOS 8, obtengo lo siguiente en la llamada a -createFileAtPath:

  *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSFileManager fileSystemRepresentationWithPath:]: nil or empty path argument' 

Aquí hay un fragment de código mínimo que reproduce el problema:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docsDir = [paths objectAtIndex:0]; [[NSFileManager defaultManager] changeCurrentDirectoryPath:docsDir]; [[NSFileManager defaultManager] createFileAtPath:@"temp.dat" contents:nil attributes:nil]; 

Tenga en count que el argumento de ruta en createFileAtPath es "temp.dat" , si lo cambio a "./temp.dat" , la llamada se realiza correctamente.

¿Estoy haciendo algo estúpido y esto solo funcionó "accidentalmente" en versiones anteriores de iOS? ¿O cambiaron intencionalmente el comportamiento aquí? ¿O es un error en iOS 8? Otros methods de NSFileManager que toman un argumento de path parecen estar bien con solo un nombre de file (por ejemplo, -removeItemAtPath:@"temp.dat" error:&err ).

Editado para agregar:

Esto solo sucede en un dispositivo físico. En el simulador, la llamada anterior para createFileAtPath tiene éxito.

Abrí un error con Apple y lo cerraron como un duplicado. Si bien eso no necesariamente confirma que lo consideran un error, al less confirma que no soy el primero en encontrar esto, y que el comportamiento efectivamente cambió con iOS 8.

Por ahora, la solución es anteponer ./ al nombre del file o proporcionar una ruta absoluta.