views:

161

answers:

1

Hi

I'm developing my first Mac App have some issues with shell commands... I'm trying to find out how to get the permission windows that the user can enter his password. I want to copy a picture in a system folder, and change the name of another picture too. I try to change the Login window background.

Command 1: "sudo mv DefaultDesktop.jpg DefaultDesktop_copy.jpg"
Command 2: "sudo cp /path/of/image.jpg DefaultDesktop.jpg"

With the terminal, it is very easy. But with an interface, i would like this prompt asking for the password.

Here is my code for the first command:

- (void)copyDefaultBackground:(id)sender {
    NSTask *task;
    task = [[NSTask alloc] init];
    [task setLaunchPath: @"/usr/bin/sudo"];

    NSArray *arguments;
    arguments = [NSArray arrayWithObjects:@"mv"
                            @"/System/Library/CoreServices/DefaultDesktop.jpg",
                            @"/System/Library/CoreServices/DefaultDesktop_copy.jpg", 
                            nil];
    [task setArguments: arguments];

    NSPipe *pipe;
    pipe = [NSPipe pipe];
    [task setStandardOutput: pipe];

    NSFileHandle *file;
    file = [pipe fileHandleForReading];

    [task launch];

    NSData *data;
    data = [file readDataToEndOfFile];

    NSString *string;
    string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog (@"Script returned:\n%@", string);
}

Update:

I found that NSFileManager is an object that allow to manage file on the disk. Isn't it better than using a NSTask with a shell command?

Thank you.

+2  A: 

You will need to use Authorization Services to authorize the move:

Introduction to Authorization Services Programming Guide

For the file move itself, why not use NSFileManager? Authorization aside, both your steps (make a backup, then move the new file into place) can be done with a single line of code each with NSFileManager.

Joshua Nozzi

related questions