2012-02-27 38 views
0

團隊運行腳本,根目錄權限問題可可應用在Mac OS 10.7

我是新來的MAC OS Cocoa應用程序的研究與開發。 我正在開發一種可可應用程序,一種實用程序應用程序。 在我的申請我執行像「MKDIR」,「CP」,一些命令「RM」 林從客觀c。使用系統命令執行上述命令。如下所示。

system("mkdir tempDir"); 

從xcode運行此應用程序它運行良好,並創建所有文件夾。當我通過在Mac OS X 10.7 .app文件雙擊運行,不會產生與錯誤代碼退出目錄 256我注意到,雖然推出從.app文件的應用程序直接被從根目錄下即Macintosh上運行駕駛。

然後,我已經改變了蘋果的許可,允許讀給大家&寫權限。我在「GetInfo」部分做了這個。通過這樣做,應用程序可以從.app運行時創建目錄。

請幫我解決從我的應用程序本身此權限問題。

回答

0

如果權限都OK,那麼它聽起來像你可能不會得到正確的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]; 

注意:你能適應這種方法如果使用[任務結束]邏輯和下降返回字符串行爲就像系統()命令。即使您不需要它,輸出也可以幫助您排除錯誤。

+0

感謝您的建議,我會努力讓您知道。 – shatthi 2012-03-02 06:49:44

0

我有完全相同的問題,因爲你,以爲我也可以共享解決方案。您正在將數據寫入錯誤的目錄。見this page

在Mac上,正確的位置存儲持久性與用戶相關的文件,你的應用是在具有相同名稱作爲當前用戶的應用支持目錄的應用程序的目錄。

上面鏈接的頁面顯示瞭如何在應用程序支持中爲您的數據創建一個目錄,並在您的代碼中找到它。這樣做解決了我所有的權限問題。