2012-05-30 2 views
0

Я написал программу в магазине Mac App, которая отображает некоторые графики. Иногда он обновляет их в Интернете. Как и у большинства людей, мне сейчас нужно приложение Sandbox.«sandboxd: deny file-write-create» при написании собственного пакета приложения

Почти все работает, но при обновлении он сохраняет файл в собственном пачке моего приложения и терпит неудачу с «sandboxd: запретить файл-запись создать»

Я просто использовать Еореп (..., «термометр»)

путь перешел в 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 данные приложения обычно хранятся в папке Библиотеки каждого пользователя в одном из нескольких подпапок в зависимости от типа данных; см. примечание Apple на «The Library Directory Stores App-Specific Files» для первичных. Песочница усложняет это, потому что каждое приложение получает свой собственный Container inside the user's Library. Apple предоставляет ряд методов для определения правильного расположения для различных видов данных; см. «Determining Where to Store Your App-Specific Files».

+3

100% правильная, но дополнительная причина, по которой вы никогда не должны писать в свой комплект приложений, заключается в том, что вы аннулируете свою подпись кода. (Да, вы можете оставить пробелы в том, что запечатано и записать в эти пробелы, или вы даже можете переклассифицировать свой комплект после редактирования самостоятельно, но, очевидно, вы не должны этого делать.) – abarnert

+0

Спасибо! Извините за задержку в ответе. Интересно, что запись файла настроек на выходе не вызывала никаких проблем с песочницей. –

Смежные вопросы