절대 경로를 사용하지 않았으므로 경로는 프로세스의 현재 디렉토리에 상대적입니다.
앱이 샌드 박스 인 경우 현재 디렉토리는 앱 샌드 박스의 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.
}
당신은 NSSavePanel를 사용하고 사용자가 대상을 선택하거나 몇 가지 코드를보기 –
당신의 앱 대상 기능에 APP 샌드 박스를 해제 할 수 있도록해야합니다. – bbum
코드를 업데이트했습니다. 단지 기본적인 예일뿐입니다. 마지막으로 /Users/nubes/Library/Containers/nubes.fr.Proxy-Nubes-Cocoa/Data에있는 파일을 테스트합니다. 실행 파일이 어디에 있든 어떻게 만들 수 있습니까? – user3711521