2012-05-30 2 views
0

그래픽을 표시하는 Mac App Store에 프로그램을 작성했습니다. 때로는 인터넷에서 업데이트됩니다. 대부분의 사람들과 마찬가지로 지금 내 앱을 샌드 박스로 가져 가고 있습니다.'sandboxd : 파일 쓰기 - 쓰기 거부'- 앱 자체 번들에 쓸 때

거의 모든 작업을하지만, 업데이트 할 때 내 응용 프로그램의 자신의 번들에 파일을 저장하고 실패 'sandboxd : 파일 쓰기 만들 거부'난 그냥 (..., "WB"fopen을 사용

을)

는 fopen에 전달 경로는 : /Users/MyUser/Library/Developer/Xcode/DerivedData/MyApp-czuwveatgjffaggwqjdqpobjqqop/Build/Products/Debug/My.app/Contents/Resources/the_file.foo

경로는 다음을 사용하여 생성됩니다.

CFBundleRef bundle = CFBundleGetMainBundle(); 
CFURLRef url = CFBundleCopyResourcesDirectoryURL(bundle); 
CFURLGetFileSystemRepresentation(url, true, (UInt8*)buf, sizeof(buf)); 

여기서 분명히 잘못된 것을하고 있습니까? 내 응용 프로그램은 다중 플랫폼이므로 이상적으로는 fopen/etc를 계속 사용합니다. 내가 이해했듯이 앱이 다른 곳에서 아무 일도 할 수 없더라도 앱은 자체 번들에 글을 써야합니다.

감사합니다.

답변

6

OS X 앱 은 앱 번들에 쓰기를하지 않습니다 (샌드 박스를 사용하지 않더라도). OS X에서 응용 프로그램은 사용자가 스스로하는 것보다 파일 시스템에 더 이상 액세스 할 수 없으며 사용자는 일반적으로/응용 프로그램의 내용을 수정할 수있는 권한이 없습니다. 이것은 일반적으로 앱 번들 내에 데이터를 저장하는 iOS 앱과는 매우 다르다는 점에 유의하십시오.

OS X에서 응용 프로그램 데이터는 일반적으로 각 사용자의 라이브러리 폴더에있는 데이터 유형에 따라 여러 하위 폴더 중 하나에 저장됩니다. 주요 내용은 애플의 "The Library Directory Stores App-Specific Files"노트를 참조하십시오. 샌드 박스 처리는 각 앱이 자체적으로 Container inside the user's Library을 갖기 때문에이를 복잡하게 만듭니다. Apple은 다양한 종류의 데이터에 대한 올바른 위치를 결정하기위한 여러 가지 방법을 제공합니다. "Determining Where to Store Your App-Specific Files"을 참조하십시오.

+3

정확함 - 그러나 앱 번들에 글을 써서는 안되는 추가 이유는 코드 서명이 무효화된다는 것입니다. (예, 인봉 된 부분에 틈을 남겨두고 그 틈에 글을 쓸 수도 있고 직접 편집 한 후에 번들에 다시 서명 할 수도 있지만 분명히하지 않아야합니다.) – abarnert

+0

고마워요! 회신에 늦어서 죄송합니다. 흥미롭게도 종료시 설정 파일을 작성해도 샌드 박스에 문제가있는 것 같지 않습니다. –