Вопрос по macos – «sandboxd: запретить файл-запись-создание» при записи в собственный пакет приложения

0

Я написал программу в магазине приложений Mac, которая отображает некоторую графику. Иногда он обновляет их в интернете. Как и большинству людей, я сейчас вынужден помещать в песочницу свое приложение.

Почти все работает, но при обновлении он сохраняет файл в собственном пакете моего приложения и завершается ошибкой с помощью «sandboxd: deny file-write-create»

Я просто использую fopen (..., & quot; wb & quot;)

Путь, пройденный в 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. Как я понял, приложению следует разрешить запись в свой собственный пакет, даже если оно заблокировано от каких-либо действий в другом месте?

Спасибо!

Ваш Ответ

1   ответ
6

never запишите в пакет приложения (даже если они не помещены в «песочницу»). В OS X приложение не имеет больше доступа к файловой системе, чем пользователь сам, и пользователь (как правило) не имеет прав на изменение чего-либо в / Applications. Обратите внимание, что это сильно отличается от приложений для iOS, которые обычно хранят свои данные в комплекте приложений.

В OS X данные приложения, как правило, хранятся в каждой папке «Библиотека» пользователя, в одной из нескольких подпапок, в зависимости от типа данных; см. примечание Apple по & quot;В каталоге библиотеки хранятся файлы приложений& Quot; для первичных. Песочница усложняет это, потому что каждое приложение получает своеКонтейнер внутри библиотеки пользователя, Apple предоставляет ряд методов для определения правильного местоположения для различных типов данных; смотри & quot;Определение того, где хранить файлы для вашего приложения& Quot ;.

Спасибо! Извините за задержку с ответом. Интересно, что запись файла настроек при выходе, похоже, не вызвала каких-либо проблем с песочницей. Gordon Williams
На 100% правильно, но еще одна причина, по которой вы никогда не должны писать в свой пакет приложений, заключается в том, что вы лишите законной силы подпись своего кода. (Да, вы можете оставить пробелы в том, что запечатано и записать в эти пробелы, или вы даже можете заново подписать свой пакет после редактирования самостоятельно, но, очевидно, вы не должны этого делать.)

Похожие вопросы