Стоит отметить, что перемещение файла на себя не удастся. У меня был метод, который заменял пробелы подчеркиванием, сделал имя файла строчным и переименовал файл в новое имя. Файлы с одним словом в имени не смогут переименоваться, поскольку новое имя будет идентичным в файловой системе без учета регистра.
Я решил это, выполнив двухэтапное переименование, сначала переименовав файл во временное имя, а затем переименовав его в нужное имя.
Какой-то псевдокод, объясняющий это:
NSString *source = @"/FILE.txt";
NSString *newName = [[source lastPathComponent] lowercaseString];
NSString *target = [[oldPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:newName];
[[NSFileManager defaultManager] movePath:source toPath:target error:nil]; // <-- FAILS
Решение:
NSString *source = @"/FILE.txt";
NSString *newName = [[source lastPathComponent] lowercaseString];
NSString *temp = [[oldPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@-temp", newName]];
NSString *target = [[oldPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:newName];
[[NSFileManager defaultManager] movePath:source toPath:temp error:nil];
[[NSFileManager defaultManager] movePath:temp toPath:target error:nil];