根目录权限问题cocoa app在mac os 10.7中运行脚本

时间:2012-02-27 12:19:39

标签: cocoa osx-lion root

我是MAC OS Cocoa应用程序开发的新手。 我正在开发一个cocoa应用程序,一种实用程序。 在我的应用程序中,我正在执行一些命令,如“mkdir”,“cp”,“rm” 我使用system命令从目标c执行上述命令。如下所示。

system("mkdir tempDir");

从xcode运行此应用程序时运行正常并创建了所有文件夹。 当我通过双击Mac OS X 10.7中的.app文件运行时,目录未创建并退出,错误代码为256.我注意到,直接从.app文件启动应用程序时,它从根目录运行,即macintosh驱动器。

然后我更改了Macintosh的权限,允许每个人的读写权限。我在“GetInfo”部分做了这个。通过这样做,允许应用程序在从.app。

运行时创建目录

请帮助我从我的应用程序本身解决此权限问题。

2 个答案:

答案 0 :(得分:0)

如果权限没问题,那么听起来你可能没有得到合适的shell环境。对于像mkdir这样的许多简单命令,有Cocoa等价物,但如果您更喜欢命令行,我建议使用NSTask对象模型,我非常幸运。这是我自己对一个相当常见的模式的改编,供您尝试。

-(NSString *) runThisCmd:(NSString *) runString withArgs:(NSArray *)runArgs  {

//this method of calling NSTask is designed for small quick commands that return
//a small amount of data to the command line

NSTask *task = [NSTask new];
[task setLaunchPath:runString];
[task setArguments:runArgs];
[task setStandardOutput:[NSPipe pipe]];
[task setStandardInput: [NSPipe pipe]];
[task setStandardError: [task standardOutput]];
[task launch];

NSData *stdOuput = [[[task standardOutput] fileHandleForReading] readDataToEndOfFile];

[task waitUntilExit];  

if ([task terminationStatus] == 0) {

    //scriptSuccess = YES;
}
else {

    //scriptSuccess = NO;
}

NSString *outputString = [[NSString alloc] initWithData:stdOuput encoding:NSUTF8StringEncoding];
return outputString;

}

这样称呼:

NSString *runCmd = [[NSString alloc] initWithString:@"/bin/bash"];
NSArray *runArgs = [[NSArray alloc] initWithObjects:@"-c",@"mkdir",@"/tmp/newdir",nil];

//update proper label
NSString *output;
output =  [self runThisCmd:runCmd withArgs:runArgs];

注意:如果使用[task termination]逻辑并删除返回字符串,则可以调整此方法,就像使用system()命令一样。即使您不需要它,输出也可以帮助您排除错误。

答案 1 :(得分:0)

我遇到了与你完全相同的问题,并认为我可以分享解决方案。您正在将数据写入错误的目录。见this page

  

在Mac上,为应用程序存储持久用户相关文件的正确位置位于与当前用户的Application Support目录中的应用程序同名的目录中。

我上面链接的页面向您展示了如何在Application Support中为您的数据创建目录,并在您的代码中找到它。这样做解决了我所有的权限问题。