Обновление: Чтобы обновить людей, все еще использующих этот ответ для справки, BLAuthentication
использует старую и крайне не рекомендуемую функцию под названием AuthorizationExecuteWithPriviledges
, которая, работая, противоречит современной парадигме безопасности и устарел (и был в течение некоторого времени). Вы все еще можете использовать его, технически, но если вы разрабатываете для Mac OS X Lion, вы можете использовать инфраструктуру ServicesManagement, которая позволяет запускать код с привилегиями в качестве вспомогательного инструмента.
Для получения справки о том, как создать и запустить привилегированный вспомогательный инструмент, взгляните на один из моих вопросов: Написание привилегированного вспомогательного инструмента с помощью SMJobBless () .
Реального простого способа авторизации NSFileManager
не существует, поэтому вам следует изучить использование стандартных инструментов mv
и cp
, работающих под аутентификацией администратора с классом BLAuthentication
. К сожалению, сайт автора оригинала не работает, но вы можете легко найти копии класса, плавающие в Google (я также могу загрузить копию для вас, если хотите).
С BLAuthentication
то, что вы пытаетесь сделать, выглядит примерно так:
#define MOVE @"/bin/mv"
if (![[BLAuthentication sharedInstance] isAuthenticated:MOVE]) {
[[BLAuthentication sharedInstance] authenticate:MOVE];
}
NSArray *arguments = [NSArray arrayWithObjects:@"location1", @"location2", nil];
[[BLAuthentication sharedInstance] executeCommand:MOVE withArgs:arguments];
Приведенный выше код предложит пользователю ввести пароль администратора и аутентифицирует программу в течение пяти минут по умолчанию.
ПРЕДУПРЕЖДЕНИЕ
Конечно, всегда будьте осторожны с системными файлами! Старайтесь не перемещать и не манипулировать ими, когда это возможно, особенно если ваша программа будет запускаться на чужом компьютере (если что-то пойдет не так, вас обвинят)!