2017-12-29 60 views
-3

저는 Xcode를 사용하여 Cocoa (Objective-C)로 macOS 응용 프로그램을 만듭니다.Objective-C로 Cocoa를 사용하여 파일을 만들 수 없습니다.

이 있음/

나는 엑스 코드 내에서 실행 버튼 내 응용 프로그램을 실행할 때 텍스트 파일을 작성하는 일이 있지만, 문제는 내가 디렉토리 제품/릴리스에서 내 응용 프로그램을 실행할 때 파일이 생성되지 않는 것입니다 권한과 관련이 있습니까?

NSString *[email protected]"Hello world"; 
NSString *[email protected]"test.txt"; 
[sometext writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 
+1

당신은 NSSavePanel를 사용하고 사용자가 대상을 선택하거나 몇 가지 코드를보기 –

+0

당신의 앱 대상 기능에 APP 샌드 박스를 해제 할 수 있도록해야합니다. – bbum

+0

코드를 업데이트했습니다. 단지 기본적인 예일뿐입니다. 마지막으로 /Users/nubes/Library/Containers/nubes.fr.Proxy-Nubes-Cocoa/Data에있는 파일을 테스트합니다. 실행 파일이 어디에 있든 어떻게 만들 수 있습니까? – user3711521

답변

1

절대 경로를 사용하지 않았으므로 경로는 프로세스의 현재 디렉토리에 상대적입니다.

앱이 샌드 박스 인 경우 현재 디렉토리는 앱 샌드 박스의 Data 디렉토리입니다. 그러나 귀하의 증상으로 인해 앱에 샌드 박스가없는 것으로 보입니다.

앱이 이 아니고이 샌드 박싱되어 있고 Xcode에서 실행하는 경우 현재 디렉토리는 앱이있는 디렉토리입니다 (예 : /Users/mayoff/Library/Developer/Xcode/DerivedData/test-aegotyskrtnbeabaungzpkkbjvdz/Build/Products/Debug). 사용자 ID는이 디렉토리에 파일을 만들 권한이 있으므로 Xcode에서 응용 프로그램을 실행할 때 코드가 작동합니다.

앱이 이 아니고이 샌드 박싱되어 있고 Finder에서 두 번 클릭하여 실행하는 경우 현재 디렉토리는 루트 디렉토리 (/)입니다. 사용자 ID는 (일반적으로)이 디렉토리에 파일을 만들 권한이 없으므로 Finder에서 응용 프로그램을 실행할 때 코드가 실패합니다.

사용자는 NSSavePanel을 사용하여 파일을 쓸 위치를 선택하게하거나 사용자의 문서 폴더와 같이 쓰기 권한이있는 디렉토리에 파일을 작성해야합니다. 다음은 문서 폴더에 쓰기 일부 코드입니다 :

NSURL *documentDirectoryUrl = [NSFileManager.defaultManager URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil]; 
NSURL *fileUrl = [documentDirectoryUrl URLByAppendingPathComponent:@"test.txt"]; 
NSString *someText = @"Hello world"; 
NSError *error; 
if (![someText writeToURL:fileUrl atomically:YES encoding:NSUTF8StringEncoding error:&error]) { 
    // Error occurred. Details are in the error object. 
}